obj.prototype.__proto__ = events.EventEmitter.prototype
上記のコードを時々見たことがありますが、Google で調べたところ、この行ですべての EventEmitter プロパティが obj にコピーされているとのことです。また、次のようなコードも表示されます。
obj.__proto__ = events.EventEmitter.prototype
だから私はそれらが同じかどうか疑問に思っていますか?
この記事で最初の使用法を見ました。この記事では、著者が例を挙げています。
var events = require('events');
function Door(colour) {
this.colour = colour;
events.EventEmitter.call(this);
this.open = function()
{
this.emit('open');
}
}
Door.prototype.__proto__ = events.EventEmitter.prototype;
var frontDoor = new Door('brown');
frontDoor.on('open', function() {
console.log('ring ring ring');
});
frontDoor.open();
そして彼は次のように説明します。
この行:
Door.prototype.__proto__ = events.EventEmitter.prototype;
すべての EventEmitter プロパティを Door オブジェクトにコピーします。
2番目の方法については、 hexoのソースで見たinit.js に、次のコードがあります。
var hexo = global.hexo = {
get base_dir(){return baseDir},
get public_dir(){return baseDir + 'public/'},
get source_dir(){return baseDir + 'source/'},
get theme_dir(){return baseDir + 'themes/' + config.theme + '/'},
get plugin_dir(){return baseDir + 'node_modules/'},
get script_dir(){return baseDir + 'scripts/'},
get scaffold_dir(){return baseDir + 'scaffolds/'},
get core_dir(){return path.dirname(dirname) + '/'},
get lib_dir(){return dirname + '/'},
get version(){return version},
get env(){return env},
get safe(){return safe},
get debug(){return debug},
get config(){return config},
get extend(){return extend},
get render(){return render},
get util(){return util},
get call(){return call},
get i18n(){return i18n.i18n},
get route(){return route},
get db(){return db}
};
hexo.cache = {};
// Inherits EventEmitter
hexo.__proto__ = EventEmitter.prototype;
// Emit "exit" event when process about to exit
process.on('exit', function(){
hexo.emit('exit');
});