gpt4 book ai didi

javascript - 不能扩展一个类,额外的方法未定义

转载 作者:行者123 更新时间:2023-11-29 23:18:14 27 4
gpt4 key购买 nike

假设我有以下类(class):

import EventEmitter from 'event-emitter';

export default class SharedChannel extends EventEmitter {
constructor(opts) {
super();
console.log('SharedChannel constructor');
}

send(event, data) {
console.log('SharedChannel send');
}
}

在我的应用程序中,我尝试使用该类:

import SharedChannel from './lib/SharedChannel';
const channel = new SharedChannel();
channel.send('sessionData', 'Some session data goes here');

我收到以下错误:

Uncaught TypeError: channel.send is not a function

EventEmitter 类中的方法确实有效,但我的 send 方法无效。例如,我可以调用 channel.emit()。此外,我能够从该类构造函数中访问类方法。例如,我可以在 super() 之后立即调用 channel.send()。我可以通过在构造函数中调用 this.send = function() { ... 来绕过它,当然,这不是必需的。

此应用程序是使用 Webpack 和 Babel 构建的。在我的 webpack.config.js 中,我有以下 Babel 规则:

{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}

.babelrc 中:

{
"presets": ["@babel/preset-env"]
}

包的版本:

"@babel/core": "^7.0.0-rc.1",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0-rc.1",
"@babel/preset-env": "^7.0.0-rc.1",
"babel-loader": "^8.0.0-beta",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0"

关于如何解决这个问题有什么建议吗?

最佳答案

您滥用了 EventEmitter 的 API。它并不意味着用作父类,它是一个 mixin。如果我们看the usage documentation例如:

var ee = require('event-emitter');

var MyClass = function () { /* .. */ };
ee(MyClass.prototype);

使用 MyClass.prototype 调用 ee 函数会将事件发射器逻辑混合到类原型(prototype)上。同样,在您的示例中,您想要

import EventEmitter from 'event-emitter';

export default class SharedChannel {
constructor(opts) {
console.log('SharedChannel constructor');
}

send(event, data) {
console.log('SharedChannel send');
}
}
EventEmitter(SharedChannel.prototype);

关于javascript - 不能扩展一个类,额外的方法未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com