今天有人提问:Object.create疑问,正好最近在翻译 javascript 的文章——javascript的12个怪癖。

用Object.create创建对象:

var O = {a: 1};

var n = Object.create(O, {
a: {
value: 2,
enumerable:true
}
});

console.log(n); //{a: 2,a: 1}

console.log(n.a); //2


后定义的a的值为何覆盖不了原型O中a属性的值?


于是我在 Chrome 的控制台调试了一下,给出了这个答案:


你用了其它的基于类面向对象的语言来思考 javascript。在 javascript 中,没有类,没有覆盖,没有负载,他是基于原型的。

我截了一张图: