0

我有一个标记插件,我正在重构它。

我一直在传递我每次构造的对象,所以,我现在有一个函数,我传递值并返回对象。这工作正常,除了现在我需要访问插件中的一个变量。

如果您查看底部,您会在里面看到_addTag我调用了this.tag并且我想将元素的数量存储在其中,tagArray但我的调用this不会调用小部件。

(function ($) {
    $.widget("ui.tagit", {

        // default options
        options:{},

        //initialization function
        _create:function () {

            var self = this;
            this.tagsArray = [];
            ...

            ...
            this._addTag('label', 'value');

            }

        },


        _addTag:function (label, value) {
            ...

            //THIS IS WHERE THE TAG OBJECT IS CREATED
            var tag = new this.tag(label, (value === undefined ? label : value));
            tag.element = $('<li class="tagit-choice"'
                + (value !== undefined ? ' tagValue="' + value + '"' : '')
                + '>' + label + '<a class="tagit-close">x</a></li>');
            ...
        },

        tag: function (label, value, element) {
            var self = this;
            return {
                label:label,
                value:value,
                element:element,
                index: self.tagsArray.length
            }
        }

    });
})(jQuery);

改为this

$.widget.tag
__proto__: Object
constructor: function (label, value, element) {
__proto__: Object
4

1 回答 1

1

在 JavaScript 中使用new关键字调用函数会调用它,并将其上下文 ( this) 设置为新创建的对象。

tag函数中的示例中,您希望将其设置为您正在使用的小部件对象,但由于使用了关键字this,它将被设置为新创建的对象。new因此,它将失败,self.tagsArray.length因为新创建的对象没有tagsArray属性。

有关关键字的更多信息,new我建议阅读有关它的 MDN 文章 - https://developer.mozilla.org/en/JavaScript/Reference/Operators/new

于 2012-05-05T11:10:17.180 回答