5

次のコード スニペット1を実行して、JS コンソールで何が起こっているかを確認してください。

私の質問は、スニペットの最後の行に関するものです:

  1. なぜF.prototype.method;変更されるのですか?
  2. Fcustom.prototype.method変更しないためには、どのように再定義すればよいF.prototype.methodですか?

注: jQuery とアンダースコアを使用して関数を拡張しています。


  • 1テスト コード スニペット:

    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?
    
4

1 に答える 1

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"

デモ:

于 2012-08-30T11:20:44.727 に答える