gpt4 book ai didi

javascript:原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 10:35:00 27 4
gpt4 key购买 nike

当构造新对象时,该对象被设置为委托(delegate)任何尚未显式设置为其构造函数原型(prototype)的属性。这意味着我们可以稍后更改原型(prototype),并且仍然可以看到实例中的更改。

首先:

 function Foo(){}
foo=new Foo();
Foo.prototype={};
foo.constructor==Foo//true.why is this happening since construtor prototype is empty object

所以声明没有按照定义工作。对还是错?但如果我这样做,结果就会不同

第二个:

 function Foo(){}
Foo.prototype={};
foo=new Foo();

foo.constructor==Foo//false as aspected

再一次第三:

  function Foo(){}
Foo.prototype={};
Foo.prototype.name="Maizere";
foo=new Foo();

foo.name==Maizere//true.The definition at the top is applying here,if so why the definition not working in the first: example

请帮助简单的英语。我真的很头疼。

最佳答案

why is this happening

new operator将实例的继承设置为构造函数的 prototype 属性当前指向的对象。所以当你这样做的时候

function Foo() {}
var foo = new Foo;

如果有人在那之后分配给 Foo.prototype 是无关紧要的 - 它不会改变 foo

  • 首先:您获得的继承constructor 属性来自“旧”原型(prototype)——一个与函数一起初始化并具有隐藏“constructor”属性的对象
  • 第二:您正在用一个空对象覆盖 prototype 属性,并且您的 foo(在覆盖后创建)继承自该属性。由于空对象继承自 Object.prototypeconstructor 属性现在指向 Object 函数。
  • 第三:同样,您在覆盖原型(prototype) 之后创建了foo。由于您将 name 属性分配给 foo 继承自的新对象,因此您也可以在 foo 上访问它。

关于javascript:原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14549857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com