2012-08-30 50 views
5

請運行下面的代碼片段,看看是什麼在JS控制檯發生如何重新定義一個方法:在「JavaScript類」

我的問題是關於在片段中最後一行:

  1. 爲什麼F.prototype.method;更改?
  2. 如何重新定義Fcustom.prototype.method以便不更改F.prototype.method

注:我使用jQuery和下劃線來擴展函數。


  • 測試的代碼片斷:

    var F = function() {}; 
    F.prototype.method = function() { 
        // some code 
    } 
    
    F.prototype.method; // it shows "some code" 
    
    
    Fcustom = $.extend(true, F, {}); 
    
    _.extend(Fcustom.prototype, { 
    method: function() { 
        // other code 
        } 
    }); 
    
    Fcustom.prototype.method; // it shows "other code" 
    
    F.prototype.method; // it shows "other code" instead of "some code" Why? 
    
+1

你想克隆函數'F'到'Fcustom'嗎? – pimvdb

+0

不幸的是,你不能克隆功能... –

回答

3
var obj = { myMethod : function() { 
       //some code 
      } 
}; 

var newObj = $.extend(true, {}, obj); 

newObj.myMethod = function(){  
    //new method 
}; 

newObj.myMethod(); //should call the new method 

雖然

obj.myMethod(); //still calls the old "//some code" 

DEMO

+0

我想你的意思是交換參數''.extend'。 – pimvdb

+0

@pimvdb:總之。是。但它認爲最好證明第一個參數是變化的目標**。雖然原始保持不變。沒有直接篡改'原型'。 –

+0

我明白了,但您的第一個片段的最後評論是不正確的,恐怕。 – pimvdb