如何在javascript中显示委托的`constructor`引用问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在javascript中显示委托的`constructor`引用问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1968字,纯文字阅读大概需要3分钟。
内容图文
![如何在javascript中显示委托的`constructor`引用问题?](/upload/InfoBanner/zyjiaocheng/732/d2472272572a441a87dfabdc7e64c6b2.jpg)
在下面的示例中,我注意到注释“修复了委托的构造函数引用”,我很好奇 – 我可以在添加javascript行后显示“不工作/然后工作吗?”
这里充分要点=> https://gist.github.com/getify/5572383
先感谢您
function Foo(who) {
this.me = who;
}
Foo.prototype.identify = function() {
return "I am " + this.me;
};
function Bar(who) {
Foo.call(this,"Bar:" + who);
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.constructor = Bar; // "fixes" the delegated `constructor` reference
解决方法:
javascript中的函数实际上是对象.当我们在Javascript中创建任何函数Foo时,解释器会自动创建一个原型属性Foo.prototype,它本身就是一个对象.解释器然后在该对象上创建一个构造函数属性,该属性引用Foo本身:
console.log(Foo.prototype.constructor); // reference to Foo;
console.log(Foo.prototype.hasOwnProperty("constructor")); // TRUE;
当我们创建Bar函数时,会发生相同的过程.但后来我们引入了一个区别.不同之处在于我们使用以下代码手动覆盖Bar.prototype上的对象:
Bar.prototype = Object.create(Foo.prototype);
现在,Bar.prototype有一个我们手动创建的新对象.这个新对象没有构造函数属性,因为它是由我们而不是解释器创建的:
console.log(Bar.prototype.hasOwnProperty("constructor")); // FALSE
所以Bar.prototype没有自己的构造函数属性,但Foo.prototype却有.接下来,假设我们创建了一个Bar实例:
var myBar = new Bar();
myBar.constructor是myBar对象上不存在的继承属性.如果我们尝试访问它,javascript解释器会在原型链中搜索构造函数属性.它没有在Bar.prototype上找到它,因为我们覆盖了该对象.解释器继续搜索并最终在Foo.prototype上找到该属性.因此,对myBar.constructor的任何引用都将引用Foo.prototype.constructor,它包含对Foo的引用:
console.log(myBar.constructor); // reference to Foo
所以这就是我们手动显式设置Bar.prototype.constructor的原因,这样当遍历原型链时,解释器会在Bar.prototype上找到一个构造函数属性,如果我们没有覆盖它的话:
Bar.prototype.constructor = Bar;
最终结果是对我们的对象更有用的行为:
var myBar2 = new Bar();
console.log(myBar2.constructor); // reference to Bar
这个问题不应该经常出现,因为人们需要检查对象的构造函数属性是很少见的.
内容总结
以上是互联网集市为您收集整理的如何在javascript中显示委托的`constructor`引用问题?全部内容,希望文章能够帮你解决如何在javascript中显示委托的`constructor`引用问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。