2012-07-31 51 views
3

我有類我應該將類方法移動到原型嗎?

function Foo(a) { 
    this.a = a; 
    this.bar = function() { 
    console.log(this.a); 
    }; 
    this.buz = function() { 
    this.a(); 
    console.log('bzz'); 
    }; 
} 

,我就會有這個類的相當多的實例。我應該將方法轉移到原型嗎?

function Foo(a) { 
    this.a = a; 
} 
Foo.prototype = { 
    bar: function() { 
    console.log(this.a); 
    }, 
    buz: function() { 
    this.a(); 
    console.log('bzz'); 
    } 
} 

回答

6

是的。這將節省內存,因爲每種方法將是shared而不是每次實例化類時重新創建。

構造函數內部的方法被認爲是privileged methods,因爲它們可以在構造函數中訪問private variables,並且只能在您需要訪問私有變量時才能使用。

Crockford on privileged methods

1

把類方法是一個好主意,以節省內存。原型中只有一個方法實例,而不是每個對象中的許多實例。

1

定義JS中構造函數內部方法的唯一原因是創建一個「Privileged」方法。

這個想法是創建一個公開可用的方法,但可以訪問私有實例變量。

相關問題