通常,当我们使用“new”关键字创建一个新对象时,实际上__原型__创建对象的属性指向原型父类的属性。我们可以如下测试:
function myfunc(){};
myfunc.prototype.name="myfunction";
var child= new myfunc();
child.__proto__=== myfunc.prototype ---> true
但是让我们看看当我更改父函数的原型时会发生什么:
myfunc.prototype={};
child.__proto__=== myfunc.prototype ---> false
child.name ------> "myfunction"
So if 孩子.__原型__没有指向 myfunc.prototype,那么它指向对象链中的哪里?更重要的是,如果它不指向 myfunc.prototype,那么它如何访问"name"的财产myfunc class?
当您使用时new
运算符创建一个对象,将创建一个新的 JavaScript 对象及其内部__proto__
属性将被设置为prototype
的函数。
在此刻
console.log(myfunc.prototype);
指的是对象
{ name: 'myfunction' }
所以,当你这样做时
var child = new myfunc();
内部
child.__proto__ = myfunc.prototype;
正在发生。现在,这里要理解的重要一点是,在 JavaScript 中,当您使用赋值运算符时,左侧名称将仅引用右侧表达式的结果。所以,在这种情况下,child.__proto__
只是该名称所引用的对象的另一个名称myfunc.prototype
。现在,两者child.__proto__ === myfunc.prototype
并指的是{ name: 'myfunction' }
。因此child.__proto__ === myfunc.prototype
正在返回true
.
现在,当你这样做时
myfunc.prototype = {};
你正在做myfunc.prototype
引用新对象{}
,但是child.__proto__
仍然引用旧对象{ name: 'myfunction' }
。因此child.__proto__ === myfunc.prototype
回报false
and child.name
仍然说myfunction
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)