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

时间:2016-11-22 10:04:52

标签: 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.onOtherThing成为undefinednull,因为当他们在something()otherThing()中被调用时,将抛出错误,声明他们的类型不是函数。

由于需要那些空函数,但它们使用内存,如果我这样做,那么这个类会更有效吗?

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

function empty() {

}

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

2 个答案:

答案 0 :(得分:1)

对于为类的每个实例创建一个新函数,你是对的。为了在所有实例中共享它,您可以在类的原型上声明它:

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

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

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

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

答案 1 :(得分:0)

为什么不尝试return truereturn false而不是返回空函数。 或者你最好能使用:

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

根据您的评论,您可以尝试:

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

 function empty() { 
   //return something
   return true;
 }