我有这样的代码
'use strict';
let log = console.log;
let cParent = function () {
this.property1 = arguments[0] || null;
this.property2 = arguments[1] || null;
this.log = function () {
log('log: ', this.property1);
}
};
let obj1 = new cParent(4, 5);
log(obj1.prototype);
log(Object.getPrototypeOf(obj1));
log(cParent.prototype);
log(Object.getPrototypeOf(cParent));
得到的结果是
undefined
{}
{}
[Function]
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
原来以前对原型链的理解一直有问题,根据 @kmxz 的提示,参考了其他回答
对象的
prototype属性的方法、属性为对象所属的那一“类”所共有。对象原型链通过__proto__属性向上寻找。为
__proto__指定null之外的原始类型(Number,String,Boolean,undefined,Symbol)值是无效的。通过构造函数或者
{}方式创建的对象的prototype属性默认为undefined{}的继承如果没有明确指定,那么
__proto__默认为Object.prototype,而Object.prototype自身也有__proto__,值为null,是原型链的终点。构造函数模式的继承
如果没有明确指定,通过构造函数创建的对象的
__proto__属性值为构造函数的prototype属性。obj.__prototype__和Object.getPrototypeOf(obj)的结果才会相同。而他们通常又与obj.constructor.prototype相同。在你的例子中,也就是
cParent.prototype === obj1.__proto__;cParent.prototype === Object.getPrototypeOf(obj1)。一个是找爸爸一个是找老公 当然不同了