首页 > 解决方案 > TypeError:无法读取未定义的属性“_events”

问题描述

为什么我会收到此错误?

events.js:133
  if (this._events === undefined ||
           ^

TypeError: Cannot read property '_events' of undefined
    at EventEmitter.init (events.js:133:12)
    at EventEmitter (events.js:66:21)
    at Object.<anonymous> (D:\Coding\Online\Node.js\FreeCodeCamp\les2_TheEventModuleAndEventEmitterClass\app.js:10:22)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)   
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:10
92:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)        
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)

    at Function.executeUserEntryPoint [as runMain] (internal/modules/ru
n_main.js:72:12)
    at internal/main/run_main_module.js:17:47
PS D:\Coding\Online\Node.js\FreeCodeCamp\les2_TheEventModuleAndEventEmitterClass>

我只写了这个:

const EventEmitter = require('events');
const eventEmitter = new EventEmitter();


class Person extends EventEmitter(){
    constructor(name){
        super();
        this._name = name;
    }
    get name(){
        return this._name;
    }
}

let pedro = new Person('Pedro');
pedro.on('name',()=>{
    console.log('my name is ' + pedro.name);
});

pedro.emit('name')

我在哪里做错了?提前致谢

标签: javascriptnode.js

解决方案


问题是您在类声明中添加了括号。您的代码应该是:

const EventEmitter = require('events');
const eventEmitter = new EventEmitter();


class Person extends EventEmitter { // This is what was changed
    constructor(name){
        super();
        this._name = name;
    }
    get name(){
        return this._name;
    }
}

let pedro = new Person('Pedro');
pedro.on('name',()=>{
    console.log('my name is ' + pedro.name);
});

pedro.emit('name')

仅供参考,您不需要实例化 EventEmitter 类来扩展它。如果您不使用 object ,则可以删除第二行eventEmitter


推荐阅读