扫码关注官方订阅号
对象
我的迷惑是为什么输出的Object的constructor是Person而不是function Object(),查阅资料上也提到了但是下面没解释为什么,说的没看懂到底在解释什么反倒最后来了句提示一定要让构造函数的原型的constructor为构造函数本身
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
function Person(name,age){ this.name=name; this.age=age; }
创建过程:1.创建一个对象(有constructor属性及[[Prototype]]属性),其中[[Prototype]]属性不可访问、不可枚举。2.创建一个函数(有name、prototype属性),再通过prototype属性 引用第1步创建的对象。3.创建变量Person,同时把函数的引用赋值给变量Person。而对于new做了啥:
创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
函数的属性和方法被加入到 this 引用的对象中
新创建的对象由 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是对的。有问题再讨论。
首先 constructor是
返回一个指向创建了该对象原型的函数引用
因而,p1.constructor.prototype本质上等同于Person.prototype,明显,Person.prototype.constructor===Person其次我对你截图的内容有一点点疑惑
原型对象的构造器不知道是不是应该这么查,是function Object(){} 哪里来的Dog()
再往上追溯一层就到object了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
创建过程:
1.创建一个对象(有constructor属性及[[Prototype]]属性),其中[[Prototype]]属性不可访问、不可枚举。
2.创建一个函数(有name、prototype属性),再通过prototype属性 引用第1步创建的对象。
3.创建变量Person,同时把函数的引用赋值给变量Person。
而对于new做了啥:
创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
函数的属性和方法被加入到 this 引用的对象中
新创建的对象由 this 所引用,并且最后隐式的返回 this
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
故你的代码相当于:
而这个:反倒最后来了句提示一定要让构造函数的原型的constructor为构造函数本身
应该是为了防止你的构造函数是继承来的,如果不手动指定,那继承来的构造函数的constructor会指到父级去。
一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。
constructor是Person是对的。有问题再讨论。
首先 constructor是
因而,p1.constructor.prototype本质上等同于Person.prototype,明显,Person.prototype.constructor===Person

其次我对你截图的内容有一点点疑惑
原型对象的构造器不知道是不是应该这么查,是function Object(){} 哪里来的Dog()
再往上追溯一层就到object了