我正在尝试使用称为loadsth的方法在Dojo中创建单例类。我想在那里从一个foreach循环中运行this.own。但是,当我运行此代码时,它说

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;
});


我想这与单个类的实现有关。

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

最佳答案

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

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

笔记:


不赞成使用声明的字符串参数,因为它填充了一个不鼓励使用的全局名称空间。
我建议将destroyable重命名为Destroyable。构造函数的通用约定以大写字母开头。

关于javascript - Dojo中未定义的this.own,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28093205/

10-12 06:32