我有这样的代码
'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]
原来以前对原型链的理解一直有问题,根据 @kmxz 的提示,参考了其他回答
对象的
prototype
属性的方法、属性为对象所属的那一“类”所共有。对象原型链通过__proto__
属性向上寻找。为
__proto__
指定null
之外的原始类型(Number
,String
,Boolean
,undefined
,Symbol
)值是无效的。通过构造函数或者
{}
方式创建的对象的prototype
属性默认为undefined
{}
的继承如果没有明确指定,那么
__proto__
默认为Object.prototype
,而Object.prototype
自身也有__proto__
,值为null
,是原型链的终点。构造函数模式的继承
如果没有明确指定,通过构造函数创建的对象的
__proto__
属性值为构造函数的prototype
属性。