【发布时间】:2018-08-12 21:38:24
【问题描述】:
这里Object.create()用于继承。
JavaScript 代码:
var x = {
a: 5,
foo: function() {
return this.a * this.a;
}
};
var o = Object.create(x);
console.log('\'x\':', x);
console.log('Object \'o\':', o);
console.log('Property \'o.a\':', o.a);
console.log('Method \'o.foo()\':', o.foo());
o.a = 7;
console.log('-----After setting o.a directly-----');
console.log('Object \'o\':', o);
console.log('Property \'o.a\':', o.a);
console.log('Method \'o.foo()\':', o.foo());
以上代码的输出是:
'x': { a: 5, foo: [Function: foo] }
Object 'o': {}
__proto__:
a: 5
foo: ƒ ()
__proto__: Object
Property 'o.a': 5
Method 'o.foo()': 25
-----After setting o.a directly-----
Object 'o': {a: 7}
a: 7
__proto__:
a: 5
foo: ƒ ()
__proto__: Object
Property 'o.a': 7
Method 'o.foo()': 49
所以最初的值a 和函数foo() 是从x 对象派生到o 对象,所以它们在对象o 的原型中。
但是后来当我在对象o中设置a的值时,该对象有一个新属性a:7以及a:5仍然存在于对象o的原型中,奇怪的是函数foo() 返回的是 49(7*7) 而不是 25(5*5)**,这怎么可能?
编辑:代码在谷歌浏览器的控制台中运行,输出格式从那里复制
【问题讨论】:
标签: javascript inheritance prototype javascript-objects