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

Calling a method of a function constructor from another function in the global scope - Javascript

本文关键字:函数 调用 构造函数 方法 Javascript 全局 另一个 范围内      更新时间:2023-09-26

>我有以下函数构造函数

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如果我的函数 1 是

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

同样适用于 func 2

这行不通。不应该适用于这个照顾上下文吗?

关闭。

  1. 您需要致电this.markDone();
  2. thisforEach循环中设置不同,因此您需要显式设置它或更早地捕获它并将其设置为其他内容,例如that

试试这个:

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/

你可以这样做

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