我遇到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 :(得分: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会自动将“this”设置为变量。 另一方面,这段代码,它将无法按预期工作:
var temp= new myTuwas();
var setData= temp.setData;
setData();
因为在这个调用中没有引用句子中的对象,所以没有定义“this”。在严格模式下,这将是undefined
。如果您未处于严格模式,则这将是全局上下文(浏览器中为this === window
)。实际上,这与此代码具有相同的结果,直接从原型中获取函数:
var setData=myTuwas.prototype.setData;
setData();
如何解决?将对象和回调函数传递给myClass.setData函数并使用call
或apply
:
function setData(context,callbackFn) {
callbackFn.apply(context);
}
答案 1 :(得分:0)
将上下文传递给回调函数。
myClass.prototype.setData = function(callback,ctx){
console.log(typeof callback);
callback.call(ctx);
}
//设置数据时
myInst.setData(myInstTuwas.setData, myInstTuwas);