我正在阅读这篇文章关于constructor属性的文章,它声明如下:
返回对创建实例原型的对象函数的引用。
他们举了一个例子:
function Tree(name) {
this.name = name;
}
var theTree = new Tree('Redwood');
console.log('theTree.constructor is ' + theTree.constructor);这里的实例是theTree,它的原型是Object.getPrototypeOf(theTree),它是对象函数,而不是Tree。我误会什么了?
发布于 2016-07-14 07:30:01
对象的原型通常是从其构造函数继承的:
function Tree() {}
Tree.prototype.foo = function () {};
var theTree = new Tree();theTree现在拥有了它的原型链中的theTree.foo。function Tree初始化了对象,并负责其原型链的内容。这就是为什么他们将其表达为“创建实例原型的对象函数”的原因。
发布于 2016-07-14 08:28:14
Object.getPrototypeOf(theTree)是树函数的原型
Object.getPrototypeOf(theTree) == Tree.prototype; // true两者都引用同一个对象。
而且Tree.prototype有一个名为‘构造函数’的属性,它实际上是对树函数的引用
theTree.contructor == Tree.prototype.constructor ;// true基本上,theTree有一个proto链接( proto,____proto____),这个proto链接指向Tree.prototype。因此,当您执行theTree.constructor时,它实际上遵循proto链接,并到达Tree.prototype,并找到本身具有树函数的构造函数。
https://stackoverflow.com/questions/38367835
复制相似问题