0

这个问题的灵感来自 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; }

是我误解了他在说什么,还是文章不正确?

4

1 回答 1

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 {}
于 2012-12-22T10:39:00.820 回答