我有这样的代码:
function Food(type) {
this.type = type;
this.timesEaten = 0;
}
Food.prototype.eat = function() { // Dependent function
this.timesEaten++;
}
Food.prototype.pasta = function() { // In-dependent function
return new Food("pasta")
}
因此,我希望能够在不定义新食物的情况下使用面食功能,如下所示:
var pasta = Food.pasta()
但是,那是行不通的,你必须这样做:
var pasta = new Food().pasta()
“Food.pasta()”如果你这样设置 Food 就可以工作了:
var Food = {
pasta: function() {
return {type: pasta};
}
}
但是 new Food 将不起作用,这意味着我将不得不使用“return {type: pasta}”。
请问有没有办法制作出既可以依赖又可以独立的食物?
最佳答案
像您的.pasta()
方法这样不对任何实例数据进行操作的方法称为静态方法。您不希望它出现在原型(prototype)上,因为原型(prototype)只会出现在实例化对象的查找链中(在通过执行 new Food()
创建实际的 Food
对象之后) ).
相反,对于静态方法,您可以像这样将其放在构造函数本身上:
Food.pasta = function() {
return new Food("pasta");
}
那个,你可以这样调用它:
var pasta = Food.pasta();
记住,在 javascript 中,函数也是对象,因此它们可以具有属性/方法,当您正在寻找放置不属于特定实例化对象或需要的静态函数或数据的地方时,这很有用在特定的实例化对象上被调用,Constructor 对象通常是放置它们的好地方。
关于JavaScript 让独立的函数在不定义 new 的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23874657/