我正在用JavaScript探索原型。
function A () { this.x = 7; };
function B () {};
B.prototype = new A();
var b = new B();
b.x; // => 7
// But why is it giving 'false' below
b.hasOwnProperty('x'); // => false
我的查询是,
这是正确的代码吗?
如果' b'是有' x'那么它应该是它的财产。如果是这样,为什么它会给出错误
请澄清。
答案 0 :(得分:1)
b.x
是b
的原型上的属性,而不是b
本身。
hasOwnProperty
仅检查自己的属性,因此命名。
答案 1 :(得分:1)
x是B.prototype
上的属性,而不是对象b上的属性。 B.prototype存储在b。 proto 而不是b
本身。
关于您的代码,您还应该这样做:
function B(){ A.apply(this, arguments); }
这将确保在调用B()构造函数来创建实例时调用基本构造函数。 这也将使财产" x"可用于B的每个实例。
答案 2 :(得分:0)
x
的值存储在b.__proto__.x
而不是b.x
,这就是hasOwnProperty
方法返回false的原因。
答案 3 :(得分:0)
谢谢gp&所有:
function B () { A.call(this); };
B.prototype = Object.create(A.prototype);
var b = new B();
b.hasOwnProperty('x'); // => true
上面的代码是将'x'添加到b。