Javascript 呼叫未定义

Javascript 呼叫未定义,javascript,jquery,callback,call,jquery-callback,Javascript,Jquery,Callback,Call,Jquery Callback,我正在尝试将插件设置为接受内部回调函数作为选项参数: (function($) { $.fn.MyjQueryPlugin = function(options) { var defaults = { onEnd: function(e) {} }; var settings = $.extend({}, defaults, options); return this.each(function

我正在尝试将插件设置为接受内部回调函数作为选项参数:

(function($) {

    $.fn.MyjQueryPlugin = function(options) {
        var defaults = {
            onEnd: function(e) {}
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            // do stuff (complete() gets called here)

        });
    };

    function complete(e){
        settings.onEnd.call(this); // <- the error?
    }

})(jQuery);
(函数($){
$.fn.MyjQueryPlugin=函数(选项){
var默认值={
onEnd:函数(e){}
};
var设置=$.extend({},默认值,选项);
返回此值。每个(函数(){
//执行任务(此处调用complete())
});
};
功能完成(e){

settings.onEnd.call(this);//
settings
不在
complete()的范围内

您试图在定义设置的函数之外引用设置。您已将设置设置的范围限定为指定给
$.fn.MyjQueryPlugin
的函数中的局部变量,但您使用的是未关闭该局部变量的函数

您可以为关闭
设置的每个
MyjQueryPlugin
调用创建一个新的
complete
函数:

(function($) {

    $.fn.MyjQueryPlugin = function(options) {
        var defaults = {
            onEnd: function(e) {}
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            // do stuff (complete() gets called here)

        });

        // `complete` now closes over `settings`
        function complete(e){
            settings.onEnd.call(this); // <- the error?
        }
    };

})(jQuery);
(函数($){
$.fn.MyjQueryPlugin=函数(选项){
var默认值={
onEnd:函数(e){}
};
var设置=$.extend({},默认值,选项);
返回此值。每个(函数(){
//执行任务(此处调用complete())
});
//'complete'现在关闭'settings'`
功能完成(e){

settings.onEnd.call(this);//变量设置超出完整函数的范围。请将完整函数放置在定义了设置的函数中

$.fn.MyjQueryPlugin = function(options) {
    var defaults = {
        onEnd: function(e) {}
    };

    function complete(e){
        settings.onEnd.call(this); // <- the error?
    }

    var settings = $.extend({}, defaults, options);

    return this.each(function() {
        // do stuff (complete() gets called here)

    });
};
$.fn.MyjQueryPlugin=函数(选项){
var默认值={
onEnd:函数(e){}
};
功能完成(e){

settings.onEnd.call(this);/“您需要在自调用函数内部进行var设置。”如果他这样做,所有对
MyjQueryPlugin
的调用都将共享相同的
设置,这可能不是所需要的,因为它将
选项
参数混合到
设置
@t.J中。它们应该在每次对插件的新调用中被覆盖,不是吗?。顺便说一句,OP是一个she:)(小写字母“a”):我们不知道调用没有重叠(ajax,
setTimeout
,等等)。@Alex(大写字母“A”):很抱歉!@t.J.我明白你的意思。。我将编辑我的答案,使其正确且简短:)在你的问题中引用错误会很有用。。是的,问题出在另一个使用call()的函数中忘了换了:D
$.fn.MyjQueryPlugin = function(options) {
    var defaults = {
        onEnd: function(e) {}
    };

    function complete(e){
        settings.onEnd.call(this); // <- the error?
    }

    var settings = $.extend({}, defaults, options);

    return this.each(function() {
        // do stuff (complete() gets called here)

    });
};