在JavaScript中使用新运算符定义原型
我在用JavaScript探索原型在JavaScript中使用新运算符定义原型,javascript,prototype,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”的值,那么它应该是它的属性。如果是,为什么它给出的是假
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”的值,那么它应该是它的属性。如果是,为什么它给出的是假的。
请澄清。
b.x
是b
的原型上的属性,而不是b
本身。
hasOwnProperty
只检查自己的属性,因此命名。x是B.prototype
上的属性,而不是对象B上的属性。B.原型存储在B.proto上,而不是存储在B
本身上
关于您的代码,您还应执行以下操作:
function B(){ A.apply(this, arguments); }
这将确保每当调用B()构造函数来创建实例时,都会调用基构造函数。
这还将使属性“x”在B的每个实例上都可用。将
x
的值存储在B中。uuu proto\uuuu.x
而不是B.x
,这就是hasOwnProperty
方法返回false的原因。谢谢gp&all:
function B () { A.call(this); };
B.prototype = Object.create(A.prototype);
var b = new B();
b.hasOwnProperty('x'); // => true
上面的代码将“x”添加到b中。谢谢Oleg,你的意思是:b.uu proto_uu.hasOwnProperty('x');//=>因为它是继承的,不是自己的财产。这就是原型的全部内容。不,你没有这样做。请看,您能解释一下没有非标准属性的情况吗?