在我们当前的代码库中,我们正在创建这样的类
my_class = function(){
//do some constructor stuff
}
my_class.prototype = {
var1 : 'value',
var2 : 'value',
var3 : 'value'
.
.
.
//etc
}
有几个这样的类我想继承一个超类。但是,如果我做这样的事情,我最终会覆盖超类的原型。
my_super_class = function(){
}
my_super_class.prototype.generic_function = function(){
//all subclasses should have this function
}
my_subclass = function(){
//constructory stuff
}
//inherit the superclass
my_class.prototype = new my_super_class();
my_class.prototype = {
//oops, there goes my superclass prototype...
var1 : 'value',
var2 : 'value',
var3 : 'value'
.
.
.
//etc
}
有没有比my_class.prototype.val1 ='value'更好的方法呢?继承超类之后......等等?我想遵循我们当前代码库中的约定,因为它很简短。
答案 0 :(得分:3)
您使用任何库或框架吗?如果你这样做,你可能会使用像Prototype的Object.extend或jQuery.extend这样的东西。
您可能还会发现有趣的是来自Object.create的新ECMA-262 5th Edition。
答案 1 :(得分:3)
你可以做的是写一个merge
函数:
function merge(one, other) {
for(var k in other) {
if(other.hasOwnProperty(k) && !one.hasOwnProperty(k)) {
one[k] = other[k];
}
}
}
然后,您可以使用prototype
:
merge(my_class.prototype, {
var1 : 'value',
var2 : 'value',
var3 : 'value'
.
.
.
//etc
});
答案 2 :(得分:2)
您可以编写一个处理属性赋值的函数:
function extend(a, b) {
for(var prop in b) {
if(b.hasOwnProperty(prop)) {
a[prop] = b[prop];
}
}
}
my_class.prototype = new my_super_class();
var my_class_proto = {
//...
}
extend(my_class.prototype, my_class_proto);
答案 3 :(得分:0)
我也在努力为JavaScript中的那些东西找到一个很好的语法,但我看到过这样的东西:
// inherit the superclass
myClass.prototype = new mySuperClass();
(function() {
this.var1 = 'value';
this.var2 = 'value';
// etc.
}).call(myClass.prototype);
这似乎比编写myClass.prototype
更好。