这可能吗?我的页面加载后,我试图覆盖一个javascript方法。有问题的代码与此类似:
myObject = Backbone.ViewManager.BaseView.extend({
myMethod: function() {
alert("in old method definition");
},
initialize: function() {
var a = this;
Our.Events.on("alertEvent", function(){
a.myMethod();
}
}
);
(Backbone.ViewManager
位只是一种使用框架在javascript中创建对象的方法,在这里并不重要。)
请注意上面initialize
方法中定义的事件回调。我们会在创建对象后立即对其进行初始化。
我的网页加载后,我尝试重新定义myMethod
以提醒其他消息。但是当alertEvent
触发时,原始消息会显示在警报中。
我认为这是因为一个闭包,在myObject
初始化后重新定义a
上的方法不会影响a
指向的定义?如果是这种情况,我可以做些什么来改变$(".preview-template")
使用的定义,还是我不幸运?
答案 0 :(得分:1)
您应该能够在您创建的对象上定义myMethod
,这将覆盖原型myMethod
。你写的东西应该能够工作,因为你不是直接引用myMethod,而是通过一个对象。
以下为我工作
function ObjCstr(){}
ObjCstr.prototype.myMethod = function(){ alert("Old Message"); };
ObjCstr.prototype.callMyMethod = function(){
var a = this;
return function(){ a.myMethod(); };
};
var test = new ObjCstr();
var fakeListener = test.callMyMethod();
fakeListener(); // "OldMessage"
test.myMethod = function(){ alert("Overridden!"); };
fakeListener(); // "Overridden!"