将函数存储到数组导致范围问题

时间:2017-07-01 08:20:18

标签: javascript

我试图将一些函数存储到数组中。我希望实现这样的目标:

    class Store {
    constructor(){
        this.storage=[];
    }
}
let store1=new Store();
let store2=new Store();

(function (store1) {
    store1.storage.push({"func1":function () {func2();}})
})(store1);

(function (store2,store1) {
    store2.storage.push({"func2":function () { console.log('func2');}})
    let func2 = function () { console.log('func2');}
    let func1= store1.storage[0].func1
    // let func1= function () {func2();}
    func1();


})(store2,store1);

问题在于它抛出了func2未定义的问题'因为我认为范围问题。

有没有办法保持这种代码结构或行为?我需要存储这样的函数。

1 个答案:

答案 0 :(得分:1)

最简单的方法就是创建一个命名空间,如:

class Store {
    constructor(){
        this.storage=[];
    }
}
let commons = {};
let store1=new Store();
let store2=new Store();

(function (store1) {
    store1.storage.push({"func1":function () {commons.func2();}})
})(store1);

(function (store2,store1) {
    store2.storage.push({"func2":function () { console.log('func2');}})
    commons.func2 = function () { console.log('func2');}
    commons.func1= store1.storage[0].func1
    // let func1= function () {func2();}
    commons.func1();
})(store2,store1);

我不确定您的确切用例,但也许您应该考虑将这些方法放在您的类中,或者以在同一范围内定义函数的方式重构代码?