在node.js裡面也有繼承的方式,
但是,目前看到宣告一個函式可以繼承一個類別,
補充:最後發現是宣告一個函式,它會繼承一個類別的建構子(Constructor)
那就表示這一個函式也是一個建講子(Constructor),
它身為一個建構子,就表示它是某一個類別的建構子,
所以,表示你也因為這一個函式inherts宣告了一個新的類別LoopProcessor
因此可以用這一個新的類別建立物件。
這一個方式還蠻特別的,可能要研究一下。
這裡看起來宣告的LoopProcessor繼承了EventEmitter(EventEmitterEventEmitter類別的建構子(Constructor))
例子在下面這裡
Day11 - Node.js EventEmitter
var emitter = require('events').EventEmitter;
// need util module when using inherits
var util = require('util');
function LoopProcessor(num) {
// create a new object for current class
var me = this;
setTimeout(function () {
for (var i = 1; i <= num; i++) {
me.emit('BeforeProcess', i);
console.log('Processing number:' + i);
me.emit('AfterProcess', i);
}
}
, 2000)
return this;
}
//LoopProcessor is inherited from emitter class
util.inherits(LoopProcessor, emitter)
var lp = new LoopProcessor(3);
lp.on('BeforeProcess', function (data) {
console.log('About to start the process for ' + data);
});
lp.on('AfterProcess', function (data) {
console.log('Completed processing ' + data);
});
可以參考util的function API
util.inherits
util.inherits(constructor, superConstructor)#
constructor <Function>
superConstructor <Function>
但是,目前並不建議使用util.inherits()
Usage of util.inherits() is discouraged. Please use the ES6 class and extends keywords to get language level inheritance support.
另外,這裡的this表示的是什麼呢?
一般來說,this表示的是在宣告類別(class)時,
會用到類別自己的成員或是函式時,
用這一個this.myfunction或this.mymember來表示。
但是,目前這一個宣告方式,
我想應該是因為他是一個建構子,
所以,這一個this表示的是一個未來繼承類別使用的。
function LoopProcessor(num) {
// create a new object for current class
var me = this;
setTimeout(function () {
for (var i = 1; i <= num; i++) {
me.emit('BeforeProcess', i);
console.log('Processing number:' + i);
me.emit('AfterProcess', i);
}
}
, 2000)
return this;
}
Understanding the “this” Keyword in JavaScript
裡面提到
“this” Refers to a New Instance
When a function is invoked with the new keyword, then the function is known as a constructor function and returns a new instance. In such cases, the value of this refers to a newly created instance.
換句話說,若用這個方式的話,看起來是在function使用this
但實際上是建立一個類別(class)
這個方式還蠻特別的
如果我不使用parents的函式的話,
確實是可以不用宣告me這一個變數
例如修改如下
var emitter = require('events').EventEmitter;
// need util module when using inherits
var util = require('util');
function LoopProcessor(num) {
// create a new object for current class
// var me = this;
setTimeout(function () {
for (var i = 1; i <= num; i++) {
// me.emit('BeforeProcess', i);
console.log('Processing number:' + i);
// me.emit('AfterProcess', i);
}
}
, 2000)
// return this;
}
//LoopProcessor is inherited from emitter class
util.inherits(LoopProcessor, emitter)
var lp = new LoopProcessor(3);
lp.on('BeforeProcess', function (data) {
console.log('About to start the process for ' + data);
});
lp.on('AfterProcess', function (data) {
console.log('Completed processing ' + data);
});
換句話說,
如果我要使用母函式的東西的話,
我在函式宣告的時候,
就必需宣告一個變數,
並且把this指定給它
沒有留言:
張貼留言