2015-10-13 262 views
1

我是新來的Javascript,我已經試過這樣的:如果我顯示object2.a無法更改對象屬性值

object1 = {}; 
object2 = Object.create(object1, {a:{value:1}}); 
object2.a = 2; 

然後,它是仍然1而不是2.這是爲什麼?

謝謝。

+0

這個帖子有關對象的創建模式看一看,你將有一個更好的瞭解object1之間的差異在你的例子中的object2。 http://www.codeproject.com/Articles/687093/Understanding-JavaScript-Object-Creation-Patterns – buzzsaw

回答

2

因爲Object.create()是不是你的想法。

看到這個ECMAScript 5: Object creation and property definition

有我們可以控制的屬性附加三個方面,每個給定一個布爾值:

  1. writable:控制屬性是否可以分配。如果false,分配嘗試將失敗。僅適用於數據描述符。
  2. enumerable:控制此屬性是否會出現在for...in循環中。
  3. configurable:控制是否可以刪除該屬性,以及是否可以更改其屬性描述符(writable除外)。

如果未提供,其中每個默認設置爲false

所以你需要的是:

var object1 = {}; 
var object2 = Object.create(object1, { 
    a: { 
     value: 1, 
     writable: true 
    }, 
}); 
object2.a = 2; 

好玩:)

+0

謝謝。在文章中有一句話是「可寫的:控制是否可以分配屬性,如果爲真,分配嘗試失敗,只適用於數據描述符。」 我很困惑,它說,如果屬實,分配將失敗。但默認爲false,意味着分配會好嗎? 那句話有什麼不對嗎?應該「如果是真的」是「假如」? – totally

+0

@totally:的確,這個邏輯搞砸了 – Bergi

+0

@總而言之,這是一個錯誤,很抱歉; p –