我有ObjectA和objectB。
当ObjectB完成任务时,我想在ObjectA中控制。
所以我有():
ObjectB = function ()
{
this.loaded; // it will be a fun
load_end = function () { this.loaded();}
}
我也有:
ObjectA.set_load_fun = function (ext_fun) { ext_fun = ObjectA.fake_fun;}
,代码为:
ObjectA.set_load_fun (ObjectB.loaded);
ObjectB.load();
.....
// when ObjectB has finished calls load_end, and then calls this.loaded
// but this.loaded is really 'ObjectA.fake_fun'
//
我不想写一个事件监听器.... (或者我想写'内置'事件?) 我想和ajax,filereader等一样做。
xhr.onload = function(evt) { };
xhr.onprogress = function (evt) {};
(在这种情况下,我没有定义addeventlistener(xhr," onload");}
我只是想写
ObjectB.loaded = ObjectA.fake_fun
ObjectB.loaded = global_object.function;
ObjectB.loaded = mynamespaced.bla.bla.bla.function;
我希望我解释得很好......
任何帮助将不胜感激
答案 0 :(得分:0)
如果我理解你的问题,几乎一切看起来都不错。您只需要将加载的函数分配给objectB,因此您需要将objectB传递给set_load_fun方法或只需指定此函数。
e.g。 1:
ObjectA.set_load_fun = function (obj) { obj.loaded = ObjectA.fake_fun;} ;
ObjectA.set_load_fun (ObjectB);
ObjectB.load();
e.g。 2:
ObjectB.loaded = ObjectA.fake_fun;
ObjectB.load();
此外,如果你需要使用'这个'用于在加载的函数中处理ObjectA的关键字,您需要使用绑定函数。
我为你创建了JsFiddle example。 希望它会有所帮助。
答案 1 :(得分:0)
您需要包装该函数,使其包含要在其中评估函数的上下文的对象。
var A = {
prop: "i am in A",
loaded: function () {
console.log(this.prop);
}
}
var B = {
call_func: function (fn) {
fn();
}
}
B.call_func(A.loaded); // in console you will see undefined instead of "i am in A",
//because the function will be evaluated in context of window object
您需要包装已加载的函数,以便在A。
的上下文中进行评估B.call_func(function () {
A.loaded();
}); // now you will see in console "i am in A"
正如您所看到的,如果需要在ObjectB.loaded = ObjectA.fake_fun;
的上下文中评估fake_fun
,则在您的代码中您无法使用ObjectA
。您需要将其更改为ObjectB.loaded = function () { ObjectA.loaded(); };
答案 2 :(得分:0)
好的,据我所知你想在objectB的加载变量中添加一个回调函数,然后在一段时间之后调用它作为this.loaded();
现在有不止一种方法可以做到这一点,但你想将它用作ObjectB.loaded = fun;
而不是
ObjectA.set_load_fun (ObjectB.loaded);
发送
ObjectA.set_load_fun (ObjectB);
并将其用作:
ObjectA.set_load_fun = function (obj) { obj.loaded = ObjectA.fake_fun;}
您需要这样做的原因是因为如果完全更改了传递的引用,则原始对象保持不受影响。为了更清晰,请阅读javascript中的值和引用传递。