所以我一直在做很多关于原型的阅读,我在很大程度上得到它,我的意思是,我得到以下内容。
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'的对象然后枚举属性。
很明显我错过了一些东西 - 谢谢!
答案 0 :(得分:3)
Person
个对象的原型只是Person.prototype
。不是Person.constructor.prototype
,这是非常不同的:
Person.constructor
是Function
函数,它构造所有函数。由于Person
是一个函数,因此.constructor
为Function
。
Function
个对象(所有函数)的原型只是Function.prototype
。所以,Person.constructor.prototype === Function.prototype
。
普通对象的构造函数是Object
函数。所有普通对象的原型都是Object.prototype
,这是一个"[object Object]"
(首选console.dir
超过alert
,可以看到更多)。
通过普通对象,我指的是使用{}
或new Object()