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 回答