<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          Object.create()的使用總匯:創建對象,參數說明,兼容性的實現

          時間:?2018-01-02閱讀:?1035標簽:?Object

          Object.create()的含義和語法

          Object.create()是E5的一個新特性,用于創建一個具有指定原型且可選擇性地包含指定屬性的對象,其實可以理解為繼承一個對象。

          Object.create(prototype, descriptors)
          //prototype:必需。 要用作原型的對象,如果沒有則傳為 null。
          //descriptors:可選。 包含一個或多個屬性描述符的 JavaScript 對象。


          Object.create()創建新對象

          1、創建null原型的對象  

          var newObj = Object.create(null, {
            name: {
                 value: "newObj",
                 enumerable: true,
             }, 
          });
          console.log(newObj);//{name: "newObj"}

          說明:使用null創建的是一個空對象,不會具備Object.prototype 原型鏈上的屬性或者方法,比如toString()和valueOf()。通過設置enumerable:true來表明newObj的name屬性為可枚舉的,其值為newObj。

          2、創建一個普通的空對象

          var obj1=Object.create(Object.prototype);

          這樣創建的對象等價于:

          var obj2={};
          var obj3=new Object();
          console.log(obj1.__proto__===obj2.__proto__);//true
          console.log(obj1.__proto__===obj3.__proto__);//true


          Object.create()第二個參數說明:

          1、數據屬性:

          writable:是否可任意寫,表示能否修改value值
          configurable:是否可配置,表示能否通過delete刪除屬性從而重新定義屬性
          enumerable:是否可枚舉,能用 for in 枚舉
          value:值

          2、訪問屬性:

          configurable:是否可配置,表示能否通過delete刪除屬性從而重新定義屬性
          enumerable:是否可枚舉
          get:在讀取屬性時調用的函數,默認是undefined
          set:在寫入屬性時調用的函數,默認是undefined  

          3、例如:

          var obj = {
              a:function(){
                  console.log('a');
              },
          }
          var newObj= Object.create(obj,{
              n1:{
                  value:'n1',
                  writable:false,//不可寫
                  configurable: false,//不可刪除屬性從而重新定義屬性;
              },
              n2: {
                  configurable: false,
                  get: function() { return n2; },
                  set: function(value) { n2=value }
              } 
          })
          console.log(newObj.a());//輸出a
          console.log(newObj.n1);//輸出n1
          newObj.n1='hellow'
          console.log(newObj.n1);//輸出n1,這里由于設置了writable:false,//不可寫,所以修改不了newObj.n1它的值
          newObj.n2='haha';
          console.log(newObj.n2);
          
          Object.defineProperty(newObj,'n1',{
              configurable: true,
              enumerable: true,
          });//報錯:Uncaught TypeError: Cannot redefine property: n1

          可以看出:我們可以通過Object.defineProperty方法重新修改屬性,但是如果將configurable設置為false,將不能再調用Object.defineProperty()對屬性的行為進行修改,除了writable 只能修改為 false。


          Object.create()的兼容性

          Object.create在某些瀏覽器沒有支持,需要給出Object.create的兼容實現:

          // 參考JavaScript高級程序設計中的原型式繼承?
          Object.prototype.create = function(obj) {
          if(Object.prototype.create){
          return Object.prototype.create //特性檢測,判斷瀏覽器是否兼容
          }else{
          function F(){ F.prototype = obj; //以傳入參數為原型構造對象
          return new F(); } } };

          說明:

          Object()函數內部先創建了一個臨時性的構造函數,然后將傳入的對象作為這個構造函數的原型,最后返回了這個臨時類型的新實例。
          從本質上講object()對傳入其中的對象執行了一次淺復制。


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/300

          為什么你應該使用 Object.is() 進行相等性比較

          因此Javascript提供了三等運算符,三等運算符更加嚴格并且不會將操作數進行強制類型轉換。然而三等運算符也不是最好的解決方案,也存在問題

          javascript中object是什么?

          object是javascript中一個被我們經常使用的數據類型,而且JS中的所有對象都是繼承自Object對象的。下面本篇文章就來給大家簡單介紹一下javascript中的Object類型,希望對大家有所幫助。

          object 類型 和 字符串索引簽名類型的點屬性

          TypeScript 2.2 引入了一個新的 object 類型。它表示任何非基本類型。以下是 JS 的基本類型:string、boolean、number、bigint

          JS 輸出為 [object object] 是怎么回事?

          今天在學習ES6中的 Symbol 數據類型時,在寫demo時控制臺輸出為 Symbol[object object],當時有點疑惑,查閱了相關資料后搞清楚了其中的原因。在解釋之前,由于有些小伙伴可能還沒有接觸過ES

          js中valueOf和toString

          valueOf和toString是Object.prototype的方法。一般很少直接調用,但是在使用對象參與運算的時候就會調用這兩個方法了。我想大部分人都存在以下疑問:

          Object.create()分析及實現

          Object.create()方法的作用:創建一個新對象,使用現有的對象來提供新創建的對象的__proto__(會返回一個新對象,帶著指定的原型對象和屬性)。默認情況下,js中對象的隱式原型__proto__指向

          Object.defineProperty

          想到Object.defineProperty,首先不得不提到對象,對象是JavaScript的基礎,有一種常見的說法“JavaScript中萬物皆是對象”。這種說法其實并不那么準確,根據 JavaScript 對語言類型的分類

          js對象object

          訪問對象屬性的兩種方法:a:objectName.PropertyName 對象名.屬性名;This關鍵字:在普通函數下This指向的是window;對象的創建方法:通過對象字面量的形式創建對象

          Object.assign實現淺拷貝的原理

          什么是淺拷貝?淺拷貝就是創建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。淺拷貝Object.assign()是什么?主要將所有可枚舉屬性的值從一個或者多個數據源對象復制到目標對象,同時返回目標對象。

          Js中Object.freeze()方法

          Object.freeze() 方法可以凍結一個對象。一個被凍結的對象再也不能被修改;凍結了一個對象則不能向這個對象添加新的屬性,不能刪除已有屬性,不能修改該對象已有屬性的可枚舉性、可配置性、可寫性,以及不能修改已有屬性的值。

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网