我有一个标记插件,我正在重新分解。
我不断传递我每次构建的对象,所以,我现在有一个函数,我传递值并返回对象。这很好,除了现在我需要访问插件中的一个变量。
如果您查看底部,您会在_addTag
内看到我拨打this.tag
的电话,我想在tagArray
中存储元素数量,但我要调用this
1}}不会调用小部件。
(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
答案 0 :(得分:1)
使用JavaScript中的new
关键字来调用函数,并将其上下文(this
)设置为新创建的对象。
在tag
函数中的示例中,您期望将this
设置为您正在使用的窗口小部件对象,但是它将被设置为新创建的对象,因为使用new
关键字。因此,它将在self.tagsArray.length
上失败,因为新创建的对象没有tagsArray
属性。
有关new
关键字的更多信息,我建议您阅读相关的MDN文章 - https://developer.mozilla.org/en/JavaScript/Reference/Operators/new。