对象文字模式回调和这种混乱

时间:2016-06-18 16:31:57

标签: javascript jquery

var App = {
  method : function (value, callback) {
    console.log(value);  
    if (typeof callback === 'function') {
      //here
      callback.call( this );
    } 
  } 
} 

App.method('Hey there', function(){
  console.log('callback was executed!');
}); 

为什么我不能做回调(),但必须为回调调用(this)?

2 个答案:

答案 0 :(得分:1)

简单地说,你没必要。除非您希望您的回调函数将其上下文设置为“App”对象。例如:

final=[]
for i in range(6):
    final.append(list(map(int,input().split())))

我希望有所帮助!

答案 1 :(得分:0)

在您提供的回调函数的特定情况下,如果仅使用以下方法调用回调并不重要:

   callback();

你的回调代码根本没有引用this,所以它的价值没有区别。

但是,如果回调想要引用App对象的其他部分,则使用callback.call(this)进行调用可确保this在回调中引用App 。例如:

var App = {
  method : function (value, callback) {
    console.log(value);  
    if (typeof callback === 'function') {
      //here
      callback.call( this );
    } 
  },
  property: "HELLO WORLD"
} 

App.method('Hey there', function(){
  console.log('callback was executed! Property value is: ' + this.property);
}); 

使用该代码,this必须引用App才能console.log()调用访问对象属性。 .call()的使用确保了。