ecmascript - javascript constructor 为什么不是该对象的构造函数而是原型链的顶部构造函数?

查看:97
本文介绍了ecmascript - javascript constructor 为什么不是该对象的构造函数而是原型链的顶部构造函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function Dog(argument) {}

function Huskies(argument) {}

Huskies.prototype = new Dog();

var dog = new Huskies();

代码如上,当我输出:console.log(dog.constructor);的时候,输出的是Dog,我又改了一下Dog:

function Dog(argument) {
    this.__proto__ = {};
}

此时console.log(dog.constructor);输出的是Object,为什么constructor不是Huskies

好吧,怪我没说清楚,我补充一下,我的问题是为什么constructor不是Huskies而是其他的东西?

解决方案

两句话足矣:

一. 对于你自己定义的某个函数A,有:

A.prototype.constructor === A

二. 你自己new出来的对象,本身是没有constructor属性的,它的constructor需要到它的原型链去找。

你把这两句话连起来思考一下。

over。

我给你画了两张图,分别是两种情况下的图示:

下面的图是你修改了Dog的构造函数之后,造成的结果是你强行把Dog的实例对象的原型执行了一个新的对象,与Object.prototype直接连接了起来,与Huskies无关了。

这篇关于ecmascript - javascript constructor 为什么不是该对象的构造函数而是原型链的顶部构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆