我在jQuery插件中缺少一些基本的變量作用域。以下是jQuery插件存根(主要基於jQuery.com文檔)。jQuery插件:使jQuery變量可以在所有插件函數中使用
我想使變量($test
和test
)可用於插件中的所有功能。
在下面的示例代碼中,變量測試按預期向控制檯寫入'hello'。
但是,變量$test
將jQuery()寫入控制檯。
問題: (a)爲什麼$test
將jQuery(div#test)寫入控制檯? (b)在所有函數中使用jQuery變量(或任何其他變量)的最佳做法是什麼?例如類似於.net類中的類級變量。
(function ($) {
var settings = {
};
var methods = {
init: function (options) { if (options) { $.extend(settings, options); } return init(this, settings); }
};
$.fn.scopetest = function (method) {
// Method calling logic
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery plugin');
}
};
var $test = $('#test');
var test = 'hello';
var init = function (object, settings) {
return object.each(function() {
console.log($test);
console.log(test);
});
}
})(jQuery);
我在這裏看到完全相同的行爲。如果我定義這樣的選項: var options = {test1:'test', test2:$('#test') }; 我可以訪問options.test1和options.test2(不需要定義self),但test2上的console.log寫入jQuery()。 –
hm。嘗試沒有返回object.each(function(){}?只是控制檯。 – frequent
我仍然在這裏失去了一些基本的東西。再次看到這一點後,我看到選項(和所有函數)在小部件聲明。只有在所有函數中有一個變量的方法是重構插件? –