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
,因为您已将其作为某个其他对象的方法(该对象也没有它所需的数据)并将其从该对象中取消