在Javascript中,为什么在构造函数上设置原型会改变其实例上的.constructor值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Javascript中,为什么在构造函数上设置原型会改变其实例上的.constructor值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1867字,纯文字阅读大概需要3分钟。
内容图文
![在Javascript中,为什么在构造函数上设置原型会改变其实例上的.constructor值?](/upload/InfoBanner/zyjiaocheng/779/61e15b6603474f90a9d2cfb11db0fe62.jpg)
function Human(){
this.job = 'code'
}
//Human.prototype = {feeds: 'Pizza'};
var developer = new Human();
console.log(developer.constructor);
控制台日志上方
function Human() {
this.job = 'code';
}
当我取消注释Human.prototype = {feeds:’Pizza’}时;它控制台日志
function Object() {
[native code]
}
为什么在构造函数上设置原型,会影响谁是构造函数创建的对象的构造函数?
另一个例子:
function LivingBeing() {
breathes: 'air';
}
function Human(){
feeds: 'Pizza';
}
//Human.prototype = new LivingBeing();
var developer = new Human();
console.log(developer.constructor);
如评论所说构造函数是Human,当取消注释时它表示LivingBeing.为什么构造函数在原型上找到有效的东西时会进一步遍历?
我想再添加一个级别
function AThing(){
this.say = function(){return 'I am thing';};
}
function LivingBeing() {
breathes: 'air';
}
LivingBeing.prototype = new AThing();
function Human(){
feeds: 'Pizza';
}
Human.prototype = new LivingBeing();
var developer = new Human();
console.log(developer.constructor);
现在它说开发人员的构造函数是AThing.我可以说构造函数在原型链中尽可能地走了吗?
解决方法:
开发人员没有自己的属性命名构造函数,因此当你要求它时,它在原型链中寻找.由于原型是普通的Object,因此它的构造函数是默认的对象构造函数Object().
当您声明一个像函数Human()这样的新函数时,JS会创建一个隐式对象并填充原型和构造函数字段,如下所示:
X = {}
Human.prototype = X
X.constructor = Human
现在,当你编写dev = new Human时,dev的内部__proto__属性设置为X,dev.constructor解析为X.constructor,即Human.
当您取消注释“pizza”行时,代码将变为以下内容:
Human.prototype = X
X.constructor = Human
pizza = {feeds:'Pizza'}
// pizza.__proto__ = {}
// pizza.constructor = pizza.__proto__.constructor = Object
Human.prototype = pizza
// note that pizza.constructor does NOT change
dev = new Human
// dev.__proto__ = Human.prototype = pizza
dev.constructor
// dev.constructor = dev.__proto__.constructor = pizza.constructor = pizza.__proto__.constructor = Object()
内容总结
以上是互联网集市为您收集整理的在Javascript中,为什么在构造函数上设置原型会改变其实例上的.constructor值?全部内容,希望文章能够帮你解决在Javascript中,为什么在构造函数上设置原型会改变其实例上的.constructor值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。