使用JavaScript中的new运算符定义原型

时间:2014-05-18 09:50:57

标签: javascript prototype

我正在用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'那么它应该是它的财产。如果是这样,为什么它会给出错误 请澄清。

4 个答案:

答案 0 :(得分:1)

b.xb原型上的属性,而不是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。