这个问题受到启发from this article by Yehuda Katz.相关部分是:
为了促进面向对象的编程,JavaScript允许 您可以将Function对象用作要使用的原型的组合 对于新对象和要调用的构造函数:
var Person = function(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } Person.prototype = { toString: function() { return this.firstName + ' ' + this.lastName; } }
这里,我们有一个Function对象,它既是构造函数 函数和用作新对象原型的对象。
我很困惑,因为在我看来,Function对象充当构造函数,原型是不同的。从以下控制台输出chrome中可以清楚地看出这一点:
也就是说,构造函数是上面的函数对象,带有两个参数:firstName和lastName;而原型只是一个普通的对象碰巧有一个属性(toString),而属性又由单独的函数对象function() { return this.firstName + ' ' + this.lastName; }
定义
我误解了他说的是什么,或文章不正确?
答案 0 :(得分:1)
是的,这是不正确的。用于新对象的原型是在对象创建时由构造函数的.prototype
属性引用的原型,它是构造函数的一个单独的普通对象。
function Person() {
}
var a = new Person(); //a.__proto__ is assigned Person.prototype
Person.prototype = {}; //This doesn't affect a, because .__proto__ was assigned at creation time
var b = new Person(); //b.__proto__ is assigned Person.prototype, which is just the random object we created with {}