JavaScript 让独立的函数在不定义 new 的情况下工作

标签 javascript function object

我有这样的代码:

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/

相关文章:

javascript - 如何确保 eval 函数安全?

c++ - 在两个函数 C++ 之间发送一个数组

jquery - 没有表格就序列化?

javascript - 对象内部定义的函数没有返回值?

java - 我为什么要延长类(class)?

javascript - 如何同步在不同时间启动/重启的 CSS 动画

javascript - 如何避免在 "dist"目录中删除 vite 构建?

Javascript:作用域链何时创建?

python - 是否可以获得所有可能的网址?

javascript - 自动提示最合适的数据结构是什么?