gpt4 book ai didi

javascript - 可以覆盖回调中使用的方法吗?

转载 作者:行者123 更新时间:2023-12-03 08:12:12 24 4
gpt4 key购买 nike

这可能吗?我试图在页面加载后覆盖 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 使用的定义,还是我运气不好?

最佳答案

您应该能够在您创建的对象上定义myMethod,它将覆盖原型(prototype)myMethod。您编写的内容应该能够工作,因为您不是直接引用 myMethod,而是通过 a 对象。

以下内容适合我

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!"

关于javascript - 可以覆盖回调中使用的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com