Javascript传递函数,存储其引用,将其值更改为另一个函数
我有异议A和异议B 我希望在ObjectB完成其任务后在ObjectA内部进行控制 因此,我:Javascript传递函数,存储其引用,将其值更改为另一个函数,javascript,Javascript,我有异议A和异议B 我希望在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;} 代码是:
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;
我希望我解释得很好
如果我能很好地理解你的问题,我将不胜感激,几乎所有的事情看起来都很好。您只需要将加载的函数分配给objectB,所以您需要将objectB传递到set_load_fun方法中,或者只分配这个函数
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
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();
此外,如果您需要使用“this”关键字在加载的函数中寻址ObjectA,则需要使用bind函数
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
我为你创造的。
希望它会有所帮助。您需要包装函数,以便它确实包含要在其中计算函数的上下文中的对象
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
您需要包装已加载的函数,以便在
B.call_func(function () {
A.loaded();
}); // now you will see in console "i am in A"
如您所见,在代码中不能使用ObjectB.loaded=ObjectA.fake\u fun;如果需要在ObjectA上下文中评估fake_fun。您需要将其更改为ObjectB.loaded=函数{ObjectA.loaded;} 好的,据我所知,您希望向objectB的已加载变量添加回调函数,然后在一段时间后将其作为this.loaded调用 现在可以有多种方法来实现这一点,但您希望将其用作ObjectB.loaded=fun 而不是
ObjectA.set_load_fun (ObjectB.loaded);
发送
并将其用作:
ObjectA.set_load_fun = function (obj) { obj.loaded = ObjectA.fake_fun;}
您需要这样做的原因是,如果完全更改正在传递的引用,则原始对象不会受到影响。要更清楚,请阅读javascript中的传递值和引用。ok。它起作用了。我怎么做才能有一个简单的乐趣关联,也就是说,设置_load_fun=fun。我必须写一个Object.property吗?请你详细介绍一下好吗?我想要的是:set_load_fun=blah_blah,而不是set_load_funlksjdalskjd;