Javascript传递函数,存储其引用,将其值更改为另一个函数

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;} 代码是:

我有异议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;} 
代码是:

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;