2015-10-13 50 views
0

我遇到了class.property的问题。使用原型方法回调

function myTuwas(){ 
     this.was = "tuwas"; 
    } 
    myTuwas.prototype.setData = function(){ 
     console.log("tuwas", typeof this.was) 
    } 

    function myClass(){ 
     this.myVar = "hello"; 
    } 
    myClass.prototype.setData = function(callback){ 
     console.log(typeof callback); 
     callback(); 
    } 

    var myInst = new myClass(); 
    var myInstTuwas = new myTuwas(); 
    myInst.setData(myInstTuwas.setData); 

如果我叫myInstTuwas.setData比this.was定义,但如果使用myInstTuwas.setData作为参数,并在myInst.setData使用它作为一个回调函数 比this.was是不确定的。我做错了什么?

回答

0

传递给回调函数的上下文。

myClass.prototype.setData = function(callback,ctx){ 
    console.log(typeof callback); 
    callback.call(ctx); 
} 

//当您设置数据

myInst.setData(myInstTuwas.setData, myInstTuwas); 
+0

Vengat7668,非常感谢您的快速和良好的反应..它正在与两个解决方案... –

0

上下文取决于你的代码是如何调用一个函数:

function myTuwas(){ 
    this.was = "tuwas"; 
} 
myTuwas.prototype.setData = function(){ 
    console.log("tuwas", typeof this.was) 
} 

在这里,您已经定义了一个“类”叫myTuwas,它有一个方法“使用setData”,所以下面的代码按预期工作:

var temp= new myTuwas(); 
temp.setData(); 

但它的作品,因为当你调用使用的格式“variable.function()”函数的Javascript自动设置“这个”作为变量。 在另一方面,这个代码,它不会因为你希望工作:

var temp= new myTuwas(); 
var setData= temp.setData; 
setData(); 

因为在此调用没有在调用一句对象没有提及,所以“这个”没有定义。在严格模式下,这将是undefined。如果您不是处于严格模式,则这将是全局上下文(浏览器中的this === window)。实际上,这个结果与此代码相同,直接从原型获得功能:

var setData=myTuwas.prototype.setData; 
setData(); 

如何解决这个问题?对象和回调函数传递给myClass.setData功能和使用callapply

function setData(context,callbackFn) { 
    callbackFn.apply(context); 
} 
+0

巴勃罗,非常感谢您的快速和良好的反应。它是与这两个解决方案工作... –

+0

请选择为“响应接受答案“。如果没有,这个问题将仍然是“未答复”的统计数据;) –