Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用新运算符定义原型_Javascript_Prototype - Fatal编程技术网

在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”的值,那么它应该是它的属性。如果是,为什么它给出的是假

我在用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”的值,那么它应该是它的属性。如果是,为什么它给出的是假的。

请澄清。

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');//=>因为它是继承的,不是自己的财产。这就是原型的全部内容。不,你没有这样做。请看,您能解释一下没有非标准属性的情况吗?