函数和对象的原型构造函数

时间:2012-12-17 15:17:38

标签: javascript prototype

所以我一直在做很多关于原型的阅读,我在很大程度上得到它,我的意思是,我得到以下内容。

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'(在这种情况下是窗口)。另外 - 为什么我不能枚举它的属性?阅读this表明我可以使用constructor.prototype来检索我认为是'window'的对象然后枚举属性。

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

1 个答案:

答案 0 :(得分:3)

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

Person.constructorFunction函数,它构造所有函数。由于Person是一个函数,因此.constructorFunction

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

普通对象的构造函数是Object函数。所有普通对象的原型都是Object.prototype,这是一个"[object Object]"(首选console.dir超过alert,可以看到更多)。

通过普通对象,我指的是使用{}new Object()

创建的任何内容