MDN构造函数属性解释混乱

时间:2016-07-14 07:16:07

标签: javascript

我正在阅读关于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。我误解了什么?

2 个答案:

答案 0 :(得分:2)

对象的原型通常继承自其构造函数:

function Tree() {}
Tree.prototype.foo = function () {};

var theTree = new Tree();

theTree现在来自原型链theTree.foofunction 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函数