0

因此,我一直在阅读有关原型的大量信息,并且大部分都得到了它,我的意思是,我得到了以下内容。

var Animal = function(species) {
    this.species = species;
};
Animal.prototype.getSpecies = function() {
    return this.species;
}
var myDog = new Animal("Anderson");    
alert(myDog.getSpecies());

我什至明白我可以创建一个新物种并将原型设置为 Animal,然后能够调用 getSpecies()。是的!

让我困惑的是:

var Person = function(firstName, lastName) {
    this.firstName= firstName;
    this.lastName= lastName
};

var meToo = { fName: "ken", lName: "N" };
alert(meToo.constructor.prototype);  // [object Object]
alert(Person.constructor.prototype); // function Empty(){}

http://jsfiddle.net/r0k3t/s8Sx7/9/

我试图找到一些东西来解释为什么 Person 的原型是 function() {}?我认为它将被设置为全局对象“this”(在这种情况下是窗口)。另外 - 为什么我不能列举它的属性?阅读内容表明我可以使用 constructor.prototype 来检索我认为是“窗口”的对象,然后仅枚举属性。

很明显我错过了一些东西 - 谢谢!

4

1 回答 1

3

对象的原型Person,只是Person.prototype. 不Person.constructor.prototype,这是非常不同的:

Person.constructor, 是Function构造所有函数的函数。因为Person是一个函数,所以它.constructorFunction

对象(所有函数)的原型Function就是Function.prototype. 所以,Person.constructor.prototype === Function.prototype

普通对象的构造函数是Object函数。所有普通对象的原型是Object.prototype,它是一个"[object Object]"(Prefer console.dirover alert, to see more)。

我所说的普通对象是指用{}or创建的任何东西new Object()

于 2012-12-17T15:23:46.383 回答