Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展类并调用超级方法_Javascript - Fatal编程技术网

Javascript 扩展类并调用超级方法

Javascript 扩展类并调用超级方法,javascript,Javascript,我尝试创建一个函数来扩展JavaScript中的“类” function Extend(clazz, extend, info) { var properties = {}; if(typeof(info) != 'undefined') { properties.info = { value: info }; } else { properties.info = { va

我尝试创建一个函数来扩展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'
});

您正试图通过
prototype
进行扩展,但您首先没有使用
prototype

使用
this
将函数分配给类时,将函数分配给实例,而不是类本身。如果查看
Module.prototype
,它将不包含任何方法

解决问题的干净方法是向
原型声明函数:

function Module() {}

Module.prototype.isRegistred = function isRegistred() {
    return true;
};

// And so on...

好的,一些提示:在您的流程中,
function Module()
(将函数
isRegistered()
分配给
this
)调用在哪里?另一个提示:您希望
Welcome.prototype
链接到
模块。prototype
实际上是空的。
function Module() {}

Module.prototype.isRegistred = function isRegistred() {
    return true;
};

// And so on...