javascript - 有没有办法从方法中获取此/上下文?

标签 javascript prototype this

我已经用 JavaScript 完成了这个功能:

var syncCall = function( cb, obj, fn ) {
   var params = [];
   for( var i=3; i< arguments.length; i++ ) {
      params.push( arguments[i] );
   }
   fn.apply( obj, params )
      .onReject( function( result ){
         console.error( result );
       } )
       .onFulfill( function( result ){
          if( cb != undefined && cb != null ) {
             cb( result );
          }
       });
};

问题是,我必须将 obj 参数传递到 syncCall 函数中,以设置this内部fn`的正确上下文被调用。

就我而言,fn 始终是一种方法/函数,存储在 obj 属性之一中。因此,通常在执行 obj.myFunctionname() 时,myFunctionname 内的 this 运算符引用 obj。我想知道我是否可以利用这个事实。意思是,当将 fn 作为 syncCall 的参数时,以某种方式获取上下文(即 obj )并将其正确传递给 apply () 函数作为第一个参数(因此,放弃将 obj 作为 syncCall() 中的第二个输入参数)

最佳答案

如果你想摆脱 obj param fn 应该与上下文(this)无关,因为你应该能够将任何可调用的(例如不使用 this 的匿名函数)作为 fn 传递,所以 1 ) 传递绑定(bind)到 obj 的函数或 2) 保持上下文不变并调用 .apply w/o 上下文参数 fn.apply(null, params):

1) 如果在任何地方调用,则将 fn 绑定(bind)到 obj:

syncCall(cb, fn.bind(obj))

2) 如果在 obj 上下文中调用,则保持 fn 不变

obj = {

 fn: function(){
  // some logic to be done in syncCall
 },

 someObjMethod: function(){
   syncCall(cb, this.fn); //here this == obj and will be inside syncCall
 }
}

关于javascript - 有没有办法从方法中获取此/上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639967/

相关文章:

javascript - 如何在 AngularJS 中的后续请求中正确存储本地数组

javascript - 在定义函数之前使用它如何有效?

javascript - 如何在不使用 "new"运算符的情况下使用原型(prototype)继承

JavaScript:通过原型(prototype)进行属性分配

Javascript 回调丢失 'this'

Javascript如何正确克隆而不修改对象

javascript - 嵌套的 HTML 表格显示不正确

javascript - 如何使用 ES6 类创建一个不从 Object.prototype 继承的类?

C++ 类 - 我的程序有什么问题?

A 中的 JavaScript : when B inherits from A, 回调看不到 B