this.own Dojo 中未定义

this.own not defined in Dojo

我正在尝试使用名为 loadsth 的方法在 Dojo 中创建单例 class。我想要 o 运行 this.own 来自 foreach 循环。但是,当我 运行 这段代码时,它说

TypeError: this.own is not a function

我查看了 Dojo 文档和脚本,那里说方法 "own" 是 dijit/Destroyable 的一部分。但是,尽管它包含在内,但它不起作用。我在 //@1 和 //@2 的位置试过了。我实际上在位置 //@2 需要它,但想确保 foreach 循环不会隐藏 "this"。所以我尝试了 //@1 但这也不起作用。

define([
    "dojo/_base/declare",
    "dijit/Destroyable"    
], function (
    declare,
    destroyable
) {
    var SingletonClass = declare("some.Class", null, {

        _registerdPropertyGrids: [],
        _resourceNode: "",

        /*
         * This method is used register a property grid plus
         * provide the properties that should be shown in that 
         * grid. 
         */
        registerWidget: function(widgetName, propertyGridWidget) {
            console.log(widgetName);
            this._registerdPropertyGrids.push({widgetName, propertyGridWidget});
        },

        /*
         * Sets the resource node for this widget.
         */
        setResourceNode: function(resourceNode) {
            this._resourceNode = resourceNode;
        },

        /*
         * Loads sth.
         */
        loadSth: function() {
            console.log("load");
            //var deferred = this.own(...)[0]; // @1
            this._registerdPropertyGrids.forEach(function(element, index, array) {
                console.log('_registerdPropertyGrids[' + index + '] = ' + element.widgetName);

                var deferred = this.own(...)[0]; // @2
            }, this);
        }
    });
    if (!_instance) {
        var _instance = new SingletonClass();
    }
    return _instance;
});

我想这与单身class的实施有关。

所以我的实际问题是:当我在 "define" 的依赖列表中有 dijit/Destroyable 时,为什么说 this.own 未定义?

您已将 dijit/Destroyable 列为依赖项,但您实际上并没有使声明的构造函数从它扩展,因此您自己的原型上没有 own

而不是 declare("...", null, {,您需要 declare(destroyable, {(其中 destroyable 正在替换 null)。

备注:

  • 要声明的字符串参数已弃用,因为它会填充全局命名空间,AMD 不鼓励这样做。
  • 我建议将 destroyable 重命名为 Destroyable。常见的约定是构造函数以大写字母开头。