从全局范围中的另一个函数调用函数构造函数的方法 - Javascript

时间:2014-11-23 17:53:32

标签: javascript

我有以下函数构造函数

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

这不起作用。不应该用这个照顾上下文吗?

2 个答案:

答案 0 :(得分:2)

关闭。

  1. 您需要致电this.markDone();
  2. thisforEach循环中的设置方式不同,因此您需要先显式设置或稍早捕捉并将其设置为其他内容,例如that
  3. 试试这个:

    function func1() {
        console.log("func 1");
        this.markDone();
    } 
    

    this.execute = function() {
        var that = this;
        funcList.forEach(function(func){
            func.apply(that);
        }); 
    }
    

    这是一个小提琴http://jsfiddle.net/8649hu9s/1/

答案 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();