我有一个使用dojo.declare()创建的类。有时,我想添加另一个模块(也是用dojo.declare创建的),但是当我这样做时,它似乎不会成为第一个类的一部分。
这是一个简化的例子:
dojo.declare( 'class1',
null,
{
constructor: function()
{
console.log( 'class1 constructor' );
this.inherited(arguments);
}
}
);
dojo.declare( 'class2',
null,
{
constructor: function()
{
console.log( 'class2 constructor' );
}
}
);
dojo.extend( class1, class2 );
var myclass = new class1();
你可以在这里看到一个jsfiddle:http://jsfiddle.net/jdvRX/
我的目标是复制此功能:
dojo.declare( 'class2',
null,
{
_class2_prop: true,
constructor: function()
{
console.log( 'class2 constructor');
}
}
);
dojo.declare( 'class1',
class2, // class2 added as parent/mixin/module type thing
{
_class1_prop: true,
constructor: function()
{
console.log( 'class1 constructor');
}
}
);
但有时只是...基本上,我想动态地添加到class1的dojo.declare()的第二个参数。根据其他因素,可以使用或不使用class2。
在真实版本中,每个类都在一个单独的文件中,并加载了dojo.require()。
我做错了什么?
由于
答案 0 :(得分:0)
dojo.extend接收an object containing the properties to mix in而不是额外的类。
所以你必须这样做
class1.extend({
f2: function(){ console.log('class2'); }
})
或者
class1.extend( class2.prototype )
我不确定你是否可以从dojo声明中执行相同的构造函数继承魔法。也许您需要将该功能更改为另一种方法和/或手动执行继承
var oldF = class1.prototype.f
class1.extend({
f: function(){
olfF.call(this);
console.log('more stuff');
}
});
答案 1 :(得分:0)
我不知道这对你的情况是否足够,但是你可以将你想要扩展主类的类分配给变量,如下所示:
dojo.declare( 'class2',
null,
{
_class2_prop: true,
constructor: function()
{
console.log( 'class2 constructor');
}
}
);
// set this to whatever class you want to use for extending class1, or to null
var extendedClass = class2;
dojo.declare( 'class1',
extendedClass, // class2 added as parent/mixin/module type thing
{
_class1_prop: true,
constructor: function()
{
console.log( 'class1 constructor');
}
}
);
var myclass = new class1();