我正在使用官方plugin guide创建一个jquery插件。我的基本代码如下:
(function ($) {
$.fn.categories = function(options) {
var settings = $.extend({
...
}, options);
var init = function()
{
// `this` is undefined here
};
// `this` points to $("#pick-category") here
init();
return this;
};
}( jQuery ));
// usage
$(document).ready(function(){
$("#pick-category").categories();
});
我的问题是,在函数$.fn.categories
的上下文中,this
被定义,实际上是指$(#pick-category)
jquery对象。但是,在init
函数调用的$.fn.categories
函数的上下文中,this
报告为undefined
。
我的问题是,这里发生了什么?上下文如何丢失?
答案 0 :(得分:0)
init
被定义为恰好是函数的局部变量。它没有任何背景,除了你给它的东西。它与在其中声明的父函数无关。
所以使用call()
:
(function ($) {
$.fn.categories = function(options) {
var settings = $.extend({
...
}, options);
// define a local function unrelated to $.fn.categories or any other context
var init = function()
{
// `this` is now $("#pick-category")
};
// `this` points to $("#pick-category") here
// call the function with an explicit context
init.call(this);
return this;
};
}( jQuery ));