使用dojo手动链接构造函数:引数问题

bvuwiixz  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(147)

我试图创建一个继承一个类的类。
在这个类中,我想创建2个对象,它们将被传递给父类的构造函数。
为此,我必须使用手动构造函数链接并调用“inherited”(请参见http://dojotoolkit.org/reference-guide/1.7/dojo/declare.html#manual-constructor-chaining)
我的问题是我不能正确地传递参数给继承的方法。当我使用下面的代码时:

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时,被调用方就被定义了。是否可以动态地向arguments对象添加更多的参数?
如果没有,我如何在这个构造函数中用动态创建的对象调用父对象呢?
谢谢你,谢谢

mwg9r5ms

mwg9r5ms1#

this.inherited的第一个参数必须始终是arguments,这样dojo.declare才能计算出基于arguments.callee的超类方法。如果你想发送不同的参数给超类方法,那么你应该有一个数组作为this.inherited的第二个参数。t确认这对构造函数有效,但我会尝试以下操作:

this.inherited(arguments, [this.masterStore, this.cacheStore]);

我很想知道它是否有效。

oxcyiej7

oxcyiej72#

Dojo[1]的最新版本允许将对当前执行函数的引用作为第一个参数传递给this.inherited,以使其能够在严格模式下使用。
作为一个副作用,第二个参数实际上可以是一个数组(即使来自非严格代码):

constructor: function fn() {
    //...

    this.inherited(fn, [this.masterStore, this.cacheStore]);
}

[1]1.12或更高版本,如果我没记错的话。

相关问题