如何在“a”中重新定义方法;“javascript类”;
请运行以下代码段1,并查看JS控制台中发生的情况: 我的问题是关于片段的最后一行:如何在“a”中重新定义方法;“javascript类”;,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,请运行以下代码段1,并查看JS控制台中发生的情况: 我的问题是关于片段的最后一行: 为什么F.prototype.method更改 我应该如何重新定义Fcustom.prototype.method,才能不改变F.prototype.method 注意:我使用jQuery和下划线来扩展函数 1测试代码段: var F = function () {}; F.prototype.method = function () { // some code } F.prototype.met
F.prototype.method代码>更改
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?
obj.myMethod(); //still calls the old "//some code"
:我想你是想把参数换成
$。简言之,extend
@pimvdb:。对但它认为最好证明第一个论点是变化的目标。而原作则保持不变。所有这些都没有直接篡改prototype
。我理解,但恐怕您对第一个代码段的最后一条评论是不正确的。@pimvdb:很抱歉,我已经对我的评论进行了编辑。在我看来,OP是在尝试1。获取原始2的克隆。然后改变它的实现。我希望我没有犯那么多错误,对吧?你是对的:)但我的观点是newObj.myMethod===obj.myMethod
,所以两个调用都引用了“some code”函数。你想把函数F
克隆到Fcustom
?很遗憾,你不能克隆函数。。。
obj.myMethod(); //still calls the old "//some code"