簡體   English   中英

javascript中的Object.create方法

[英]Object.create method in javascript

作為javascript的初學者,我試圖從這里了解Object.create()方法

https://developer-new.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

在示例代碼中,第18行。創建一個accessable屬性,其writeable設置為true。 我還讀到可寫只適用於數據描述符。

試過跑,

var o = Object.create(Object.prototype, {
  // foo is a regular "value property"
  foo: { 
    writable:true, configurable:true, value: "hello" 
  },
  // bar is a getter-and-setter (accessor) property
  bar: {
    writable: true,
    configurable: false,
    get: function() { return 10 },
    set: function(value) { console.log("Setting `o.bar` to", value) }
  }
  });
console.log(o); 

我得到invalid property error

問題是writableset / get是互斥的。 該代碼在Chrome中生成此有用的錯誤:

Invalid property. A property cannot both have accessors and be writable...

這有一定的邏輯意義:如果您在屬性上set / get訪問器,則該屬性永遠不會被寫入和/或讀取,因為任何讀取/寫入它的嘗試都將被訪問器函數攔截。 如果將屬性定義為writable屬性為其提供訪問器函數,則同時說:

  1. “這個屬性的價值可以直接改變,”和
  2. “阻止所有讀取和/或寫入此屬性的嘗試;而是使用這些功能。”

錯誤只是阻止您指定矛盾。 我假設你寫了一個getter和setter,你真的不希望該屬性是writable 只需刪除該行,您的代碼就可以完美運行。

遲到的回答,不是在尋找選票,但希望這會有所幫助。

有兩種屬性。 每個屬性都是:

  1. 具有以下四個屬性的data屬性:

    • 枚舉
    • 配置
  2. 或者具有以下四個屬性的訪問者屬性:

    • 得到
    • 枚舉
    • 配置

因此,沒有任何屬性可以兼具getwritable 這就是JavaScript的方式! 有關詳細信息,請參閱ECMAScript標准的第8.6節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM