2015-10-13 269 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 –