我正在尝试创建一个继承一个类的类。
在这个类中,我想创建两个对象,这些对象将被传递给父类的构造函数。
要做到这一点,我必须使用手动构造函数链接并调用'inherited'(参见http://dojotoolkit.org/reference-guide/1.7/dojo/declare.html#manual-constructor-chaining)
我的问题是我无法正确地将参数传递给继承的方法。当我使用followind代码时:
define([ "dojo/_base/declare", "dojo/store/JsonRest", "dojo/store/Memory", "dojo/store/Cache", "dojo/store/Observable"],
function(declare, JsonRest, Memory, Cache, Observable)
{
var userStore;
return declare("app.UserStore", [Cache],
{
"-chains-":
{
constructor: "manual"
},
constructor: function()
{
this.masterStore = new JsonRest({
target: "/User/json",
idProperty: "name"
});
this.cacheStore = new Memory({ idProperty: "name" });
this.inherited([this.masterStore, this.cacheStore]);
}
});
});
我在declare.js中得到了一个未定义的arg.callee。
当我将'arguments'作为参数传递给inherited时,定义了callee。是否可以动态地向参数对象添加更多参数?
如果不是,我怎么能在这个构造函数中用动态创建的对象调用父元素?
谢谢!
答案 0 :(得分:5)
this.inherited
的第一个参数必须始终为arguments
。这样dojo.declare
可以找出基于arguments.callee
的超类方法。鉴于这种情况,如果你想向超类方法发送不同的参数,那么你应该有一个数组作为this.inherited
的第二个参数。我还没有确认这适用于构造函数,但我会尝试以下方法:
this.inherited(arguments, [this.masterStore, this.cacheStore]);
我很想知道它是否有效。
答案 1 :(得分:0)
最近版本的Dojo [1]允许您将对当前正在执行的函数的引用作为this.inherited
的第一个参数传递,以便在严格模式下使用它。
作为副作用,第二个参数确实可以是一个数组(即使是非严格的代码):
constructor: function fn() {
//...
this.inherited(fn, [this.masterStore, this.cacheStore]);
}
[1] 1.12或更高版本,如果我没弄错的话。