在構造函數中分配原型方法:潛在的陷阱
從風格上來說,有些人喜歡使用以下結構來定義原型方法:
var Filter = function( category, value ){ this.category = category; this.value = value; // product is a JSON object Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; } };
但是,與替代結構相比,此方法有幾個缺點:
var Filter = function( category, value ){ this.category = category; this.value = value; };// var Filter = function(){...} Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; }
功能缺點:
var Counter = function(initialValue){ var value = initialValue; // product is a JSON object Counter.prototype.get = function() { return value++; } }; var c1 = new Counter(0); var c2 = new Counter(10); console.log(c1.get()); // outputs 10, should output 0
在這種情況下,get() 傳回 c2 的局部變數值而不是 c1 的值,因為方法閉包引用原型上最近定義的值。
其他注意事項:
結論:
雖然第一個結構在風格上可能令人愉悅,但它可能會帶來功能缺陷和範圍問題。通常建議在建構函數之外分配原型方法(如第二個結構中),以避免潛在的問題。
以上是為什麼原型方法應該在建構函式之外定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!