构造函数的实例对象的constructor.prototype是Object{},这没错但是为什么这个object的

发布于 2022-09-03 23:27:43 字数 937 浏览 14 评论 0

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象</title>
</head>
<body>
    <script>
    function Person(name,age){
        this.name=name;
        this.age=age;
    }
    var p1=new Person("zxf",30);
    console.log(p1.constructor.prototype)
    //console.log(Person.constructor)
    </script>
</body>
</html>

结果
我的迷惑是为什么输出的Object的constructor是Person而不是function Object(),查阅资料上也提到了但是下面没解释为什么,说的没看懂到底在解释什么反倒最后来了句提示一定要让构造函数的原型的constructor为构造函数本身图片描述
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

π浅易 2022-09-10 23:27:46

图片描述

摇划花蜜的午后 2022-09-10 23:27:46

clipboard.png

再往上追溯一层就到object了

家住魔仙堡 2022-09-10 23:27:45
function Person(name,age){
    this.name=name;
    this.age=age;
}

创建过程:
1.创建一个对象(有constructor属性及[[Prototype]]属性),其中[[Prototype]]属性不可访问、不可枚举。
2.创建一个函数(有name、prototype属性),再通过prototype属性 引用第1步创建的对象。
3.创建变量Person,同时把函数的引用赋值给变量Person。
而对于new做了啥:

  1. 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型

  2. 函数的属性和方法被加入到 this 引用的对象中

  3. 新创建的对象由 this 所引用,并且最后隐式的返回 this

    var obj  = {};
    obj.__proto__ = Base.prototype;
    Base.call(obj);

故你的代码相当于:

function Person(name,age){
    this.name=name;
    this.age=age;
}

var p2 = {};
p2.__proto__ = Person.prototype;
Person.call(p2,'zxf',30);
console.log(p2.constructor.prototype);  //试一试,和new出来是一样的

而这个:反倒最后来了句提示一定要让构造函数的原型的constructor为构造函数本身

应该是为了防止你的构造函数是继承来的,如果不手动指定,那继承来的构造函数的constructor会指到父级去。

一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。
constructor是Person是对的。有问题再讨论。

内心激荡 2022-09-10 23:27:45

首先 constructor是

返回一个指向创建了该对象原型的函数引用

因而,p1.constructor.prototype本质上等同于Person.prototype,明显,Person.prototype.constructor===Person
其次我对你截图的内容有一点点疑惑
图片描述

原型对象的构造器不知道是不是应该这么查,是function Object(){} 哪里来的Dog()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文