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

时间:2014-10-29 20:23:26

标签: 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 param传递给syncCall function, to set proper context of这个inside fn`。

就我而言,fn始终是一个方法/函数,存储在obj个属性之一中。因此,通常在执行obj.myFunctionname()时,this内的myFunctionname运算符会引用obj。我想知道,如果我能冒这个事实的冒险。这意味着,当fn作为syncCall的参数时,以某种方式获取上下文(obj)并将其正确地传递给apply()函数作为第一个参数(因此,辞职)从obj作为syncCall()

中的第二个输入参数

1 个答案:

答案 0 :(得分:1)

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

1)如果在任何地方调用fn到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
 }
}