我尝试创建一个函数来扩展JavaScript中的“类”。
function Extend(clazz, extend, info) {
var properties = {};
if(typeof(info) != 'undefined') {
properties.info = {
value: info
};
} else {
properties.info = {
value: {
name: 'Unknown',
author: 'Unknown',
version: '0.0.0'
}
};
}
clazz.prototype = Object.create(extend.prototype, properties);
eval(clazz.name + ' = clazz;');
}
这是超级班:
function Module() {
this.isRegistred = function isRegistred() {
return true;
};
this.start = function start() {
/* Override Me */
};
this.stop = function stop() {
/* Override Me */
};
this.kill = function kill() {
/* Override Me */
};
this.onJoin = function onJoin(user) {
/* Override Me */
};
this.onLeave = function onLeave(user) {
/* Override Me */
};
this.onDice = function onDice(event) {
/* Override Me */
};
this.onMessage = function onMessage(sender, text, receiver) {
/* Override Me */
};
};
这里是扩展样本:
/**
@author Adrian Preuß <a.preuss@ChannelApp.de>
@version 1.0.0
*/
Extend(function Welcome() {
this.onJoin = function onJoin(user) {
user.sendPrivateMessage('Welcome!');
};
}, Module, {
name: 'Welcome',
author: 'Adrian Preuß',
version: '1.0.0'
});
当我尝试启动该类并尝试调用超级方法时(请参阅以下示例),出现错误“函数未知”:
var test = new Welcome();
test.onJoin(new User()); // It work's
console.log(test.info); // The info from the third args
if(test.isRegistred()) { // functtion is not defined
// Do something...
}
答案 0 :(得分:0)
您尝试延长prototype
,但您首先不使用prototype
。
使用this
将函数分配给类时,将函数分配给实例,而不是类本身。如果您查看Module.prototype
,它将不包含您的任何方法。
解决问题的简洁方法是将您的功能声明为prototype
:
function Module() {}
Module.prototype.isRegistred = function isRegistred() {
return true;
};
// And so on...