我正在阅读关于constructor
属性的this article,并说明以下内容:
返回对创建实例的Object函数的引用 原型。
他们举了一个例子:
function Tree(name) {
this.name = name;
}
var theTree = new Tree('Redwood');
console.log('theTree.constructor is ' + theTree.constructor);
这里的实例是theTree
,其原型是Object.getPrototypeOf(theTree)
,它是对象函数,而不是Tree
。我误解了什么?
答案 0 :(得分:2)
对象的原型通常继承自其构造函数:
function Tree() {}
Tree.prototype.foo = function () {};
var theTree = new Tree();
theTree
现在来自原型链的theTree.foo
。 function Tree
初始化了对象,并且还负责其原型链的内容。这就是他们将其表达为“创建实例原型的对象函数”的原因。
答案 1 :(得分:0)
Object.getPrototypeOf(theTree)是树函数的原型
Object.getPrototypeOf(theTree) == Tree.prototype; // true
两者都引用相同的对象
Tree.prototype具有名为'构造函数的属性'这实际上只是对Tree函数的引用
theTree.contructor == Tree.prototype.constructor ;// true
基本上,theTree有一个proto链接(____proto____),这个proto链接指向Tree.prototype。 所以当你执行theTree.constructor时,它实际上遵循proto链接并到达Tree.prototype并找到构造函数本身就是Tree函数