动态javascript原型扩展

时间:2012-01-31 18:45:08

标签: javascript oop class

我正在尝试构建一个简单的worker函数,该函数接受在类的原型中设置属性的配置。

假设我声明一个充当类存根的函数:

// declaration of "constructor" to fill data members from passed object
function MyClass (config) {
    for (var key in config)
        this[key] = config[key];
}

注意:这本身每次都很麻烦,我想为这个“构造函数”的主体设计一个模式。

但是,现在我想批量动态设置这个“类”的各种原型成员,如下所示:

ExtendPrototype(MyClass, {
    func1 : function (arg1) {
    },

    func2 : function (arg2) {
    },

    ...
});

这种方式看起来和感觉就像一个班级。

关键是全局函数ExtendPrototype,我尝试如下:

function ExtendPrototype (cls, protoconfig) {
    for (var key in protoconfig)
        cls.prototype[key] = protoconfig[key];
}

我的问题是,这会将“prototype”视为一个对象,在内部工作,真正设置各种原型成员,好像我已经将cls.prototype.myfunc = function()设置为几个独立的语句吗?

或者我必须在ExtendPrototype函数中使用“eval”做一些复杂的事情吗?

我知道现有的javascript库会做这样的事情,但对于我自己的代码,我正在尝试编写一个简单的类架构。

安迪

1 个答案:

答案 0 :(得分:1)

这应该按预期工作。使用点表示法设置属性与使用括号表示法设置属性之间没有区别。

这是证明它的小提琴:http://jsfiddle.net/qrsNj/


P.S。您不应该以随机函数的名称以大写字母开头。这是为对象构造函数保留的约定。