用函数替换了class A
,我用webpack构建的时候没有出现错误,但是不能正常工作,当然,当是class A
的时候工作的很好,但是只有当改成function A
的时候才不能正常工作,如下图所示,最可疑的部分是init()
方法里面的this.updateBind()
函数,它是类里面的一个箭头函数,所以我认为当我将类更改为函数时可能会出现问题。我不会上传整个源代码,因为我必须包含库并使用webpack构建它。这是因为/dist
文件夹中的main.js
和vender.js
文件很难读取。我认为this.updateBind()
函数可能会导致问题,我的猜测是正确的吗?当转换class A
到function A
时,我应该如何处理箭头函数?
class A extends B {
constructor(m) {
super(m);
}
init() {
this.updateBind = () => {
this.update();
}
window.addEventListener('resizeEnd', this.updateBind);
}
update() {
this.scroll.update();
}
destroy() {
window.removeEventListener('resizeEnd', this.updateBind);
this.scroll.destroy();
}
}
将类A替换为函数A的源
function A(m) {
B.call(this, m);
}
A.prototype.init = function() {
this.updateBind = () => {
this.update();
}
window.addEventListener('resizeEnd', this.updateBind);
}
A.prototype.update = function() {
this.scroll.update();
}
A.prototype.destroy = function() {
window.removeEventListener('resizeEnd', this.updateBind);
this.scroll.destroy();
}
A.prototype = Object.create(B.prototype);
A.prototype.constructor = B;
1条答案
按热度按时间j13ufse21#
我认为问题不在于你的箭头函数,而在于你如何通过原型继承
B
。当你这样做时:你覆盖了之前
A.prototype
中的所有其他方法,所以每个方法都变成了undefined
。展开下面的代码片段可以看到这个问题:要解决这个问题,只需将该行移动到其余方法定义的上方,就像这样: