javascript:原型(prototype)

标签 javascript

当构造新对象时,该对象被设置为委托(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/

相关文章:

javascript - 通过网络流式传输麦克风音频输入(RAW PCM)

javascript - 检索 channel 标识符时出现问题 - Discord.JS

javascript - 在 IE9 中对输入类型 'range' 使用 polyfill

javascript - 如何在 react 中检查表单的整个状态,以启用禁用的按钮提交

javascript - 在 JavaScript/jQuery 中将日期字符串转换为 unix 时间戳

javascript - 带有 PrototypeJS readAttribute 和 writeAttribute 的 IE7

javascript getElementsByClassName 不适用于 <select>

javascript - 检查 ng-repeat 中的条件

javascript - Angular Kendo Dropdownlist 自动添加空白选项

javascript - 将数据从父指令传递到子指令