我有以下函数构造函数
function myClass(funcList) {
this.markDone = function() {
console.log("Done");
}
this.execute = function() {
funcList.forEach(function(func){
func.apply(this);
});
}
}
我在全局范围内有几个函数
function func1() {
console.log("func 1");
}
function func2() {
console.log("func 2");
}
var arr = [func1,func2];
我可以通过这种方式从类的上下文中调用这些函数
var ob = new myClass(arr);
ob.execute(); //this does work
如何从这些函数func1和func2中调用markDone 如果我的func1是
function func1() {
console.log("func 1");
markDone();
}
,类似于func 2
这不起作用。不应该用这个照顾上下文吗?
答案 0 :(得分:2)
关闭。
this.markDone();
this
在forEach
循环中的设置方式不同,因此您需要先显式设置或稍早捕捉并将其设置为其他内容,例如that
试试这个:
function func1() {
console.log("func 1");
this.markDone();
}
和
this.execute = function() {
var that = this;
funcList.forEach(function(func){
func.apply(that);
});
}
答案 1 :(得分:0)
你可以这样做
function myClass(funcList) {
var myClass = this;
this.markDone = function() {
console.log("Done");
}
this.execute = function() {
funcList.forEach(function(func){
func.apply(myClass);
});
}
}
function func1() {
console.log("func 1");
this.markDone();
}
function func2() {
console.log("func 2");
}
var arr = [func1,func2];
var ob = new myClass(arr);
ob.execute();