Javascript 两个类,一个引用函数,另一个引用不同的值

Javascript 两个类,一个引用函数,另一个引用不同的值,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我有问题,不知道如何解决: this.bWords.push(word); ^ TypeError:无法读取未定义的属性“push” 这是我的密码: function multiWords(words) { class AWords { constructor(words = []) { this.words = words; this.addWordFn = ()

我有问题,不知道如何解决:

        this.bWords.push(word);
                    ^
TypeError:无法读取未定义的属性“push”

这是我的密码:

function multiWords(words) {
    class AWords {
        constructor(words = []) {
            this.words = words;
            this.addWordFn = () => {};
        }

        setAddWordFn(fn) {
            this.addWordFn = fn;
        }

        passWords() {
            this.words.forEach(word => this.addWordFn(word));
        }
    }

    class BWords {
        constructor() {
            this.bWords = [];
        }

        addWord(word) {
            this.bWords.push(word);
        }
    }

    let x = new AWords(words);
    let y = new BWords();

    x.setAddWordFn(y.addWord);
    x.passWords();

    return y.bWords;
}


console.log(multiWords(["one", "two", "three"]));
你知道为什么有不同的
值吗?
非常感谢

帕蒂

问题似乎出现在这里:

this.words.forEach(word => this.addWordFn(word));
因为您在此处为
addWordFn
设置的函数:

x.setAddWordFn(y.addWord);
的值需要与调用它时使用的值不同。您可以通过将此的正确值绑定到回调来修复它:

x.setAddWordFn(y.addWord.bind(y));
请记住,对于常规函数,函数内部的
this
值取决于函数的调用方式。使用
obj.method()
调用函数时,
method()
中的
此值将设置为
obj
。因此,您使用错误的
this
值调用
addWord
,因为您已将其作为某个其他对象的方法(该对象也没有它所需的数据)并将其从该对象中取消