我正在尝试解决我有以下代码的问题:
var piggie = new Animal(Animal.PIG);
构造函数(new Animal)如何也可以是具有属性的对象(Animal.PIG)?
我尝试过这个解决方案:
function Animal(type) {
this.typeOf = type;
return {
PIG: 'Pig'
};
}
但是Animal.PIG未定义? JS Fiddle在这里:http://jsfiddle.net/bufr2b4c/
答案 0 :(得分:1)
要使Animal.PIG
具有值,您必须在构造函数本身上创建一个属性。
function Animal(type) {
this.typeOf = type;
}
Animal.PIG = "Pig";
当构造函数运行并在 对象上设置PIG时,您的代码正在创建一个对象。 (并在你去的时候丢弃构造的Animal实例)。
答案 1 :(得分:0)
您执行console.log((new Animal).PIG); //It's done!
因为您正在访问对象的属性(您需要创建此对象。因此您需要使用新)
function Animal(type) {
this.typeOf = type;
return {
PIG: 'Pig'
};
}
console.log(new Animal);
console.log((new Animal).PIG); //this is undefined, but why?
console.log(typeof Animal); // "function"
console.log(Animal instanceof Object); // true
您可以使用以下内容:
function Color(col) {
this.color = col;
this.getColor = function() {
return this.color;
}
}
var blueBox = new Color("blue");
alert(blueBox.getColor()); // will alert blue
alert(blueBox.color); // will alert blue