我正在使用createjs库。
我有以下课程:
class Person {
constructor(){
this.name = 'John';
}
set updateName(event){
this.name += event.key;
}
}
接下来,我实例化这样的对象:
var human = new Person();
我正试图在每次按键时更新此人的姓名:
window.addEventListener.on('keydown', human.updateName);
然而,我收到错误的"无法读取属性' handleEvent'未定义"。
答案 0 :(得分:2)
human.updateName
尝试阅读updateName
属性。由于您尚未为其定义吸气剂,因此结果为undefined
。显然,无论你将它传递给(window.addEventListener.on
),都希望传递给undefined
以外的东西。
要传递实际的setter函数有点棘手,你必须通过getOwnPropertyDescriptor
访问它然后传入它:
window.addEventListener.on('keydown', Object.getOwnPropertyDescriptor(human, "updateName").set);
为了确保正确的人员得到更新,您可能还需要bind
:
window.addEventListener.on('keydown', Object.getOwnPropertyDescriptor(human, "updateName").set.bind(human));
或者,使用箭头功能作为胶水会更简单:
window.addEventListener.on('keydown', e => {
human.updateName = e;
});
旁注:updateName
是您提供方法的名称,而不是属性。通常,只会调用name
属性。
也许您打算将它作为一种方法?如果是这样的话:
class Person {
constructor(){
this.name = 'John';
}
updateName(event){ // No `set` on this line
this.name += event.key;
}
}
...和
window.addEventListener.on('keydown', human.updateName.bind(human));
或
window.addEventListener.on('keydown', e => {
human.updateName(e);
});