javascript - 使用通用的空函数而不是在每个类实例中创建一个新函数是否更有效?

标签 javascript function memory

假设我有一个类,旨在稍后添加一些回调。

function myclass() {
    this.onSomething = function () {};
    this.onOtherThing = function () {};

    this.something = function () {
        // stuff
        this.onSomething();
    };

    this.otherThing = function () {
        // other stuff
        this.onOtherThing();
    };
}

我不能让 this.onSomethingthis.onOtherThingundefinednull 因为当它们在 something()otherThing() 中调用,将会抛出错误,指出它们的类型不是函数。

由于需要这些空函数,但它们使用内存,如果我这样做,该类是否会提高内存效率?

function myclass() {
    this.onSomething = empty;
    this.onOtherThing = empty;
    ...
}

function empty() {

}

这样每个类实例的属性都指向同一个空函数,而不是每次都创建新函数。我认为定义一个空方法不会占用大量内存,但仍然......这在技术上更好吗?

最佳答案

您的说法是正确的,即为类的每个实例创建一个新函数。为了在所有实例之间共享它,您可以在类的原型(prototype)上声明它:

var MyClass = function() {
    this.something = function () {
        // stuff
        this.onSomething();
    };

    this.otherThing = function () {
        // other stuff
        this.onOtherThing();
    };
}

MyClass.prototype.onSomething = function() {};
MyClass.prototype.onOtherThing = function() {};

这样,这些方法将被所有实例共享。

关于javascript - 使用通用的空函数而不是在每个类实例中创建一个新函数是否更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738915/

相关文章:

javascript - 在 head 中运行的 javascript 函数,但不能作为源文件运行

java - 如何使Java应用程序分配的内存可编辑?

内存中的 C++ 对象

javascript - `new` 运算符如何能够覆盖硬绑定(bind),在 Function.prototype.bind(..)

javascript - 如何将排序和匹配谷歌表格公式转换为应用程序脚本/javascript?

连接 2 个字符串并返回一个新指针

c++ - 对于C++动态内存分配的确切含义有些困惑

javascript - 为什么我的时钟代码会减慢我的网站速度

javascript - 使用 three.js 实现绕相机飞行

function - 调用函数而不考虑其参数类型