0

我正在使用以下模式编写一个 javascript 库,但它无法接收传递给函数的参数,我在这里遗漏了什么吗?

(function($){

    var Foo = function(elements, options){
    ... ...
    }


    Foo.prototype = {

        constructor: Foo,

        bar: function(arg){        
            console.log(arg);     // print 'undefined' here
        },

    }

    $.fn.foo = function(option){
        return this.each(function(){
        ... ...
        })
    }

    $.fn.foo.Constructor = Bricker

    $.fn.foo.defaults = {
        ... ...
    }

})(jQuery)

当我调用 $('select').foo('bar', content) 时,内容将被记录为 'undefined',谁能告诉我问题所在?

4

1 回答 1

0

在这种情况下Foo.prototype$.fn.foo两者的工作方式不同,请尝试以下代码来创建 jquery 函数,例如,

;(function(){
    $.fn.foo = function(name,value){
       console.log(name,value);
    };
})(jQuery);

你可以用任何jquery-selector喜欢的方式调用它

$('#id').foo('bar','value');// check your console to see the magic.

而且,您的第二个场景(原型)在某种程度上有所不同,您正在使用原型方法(不同于jQuery.fn)来运行您的代码,请尝试以下操作,

var Foo = function() {};
Foo.prototype = {
    constructor: Foo,
    bar: function(arg){        
        console.log(arg); // print 'test' here
    }
};
var f=new Foo();
f.bar('test');

;(function($){
    $.fn.foo = function(name,value){
           console.log(name,value);
    };
})(jQuery);
$(document).foo('bar','value');

var Foo = function() {};
Foo.prototype = {
    constructor: Foo,
    bar: function(arg){        
        console.log(arg);     // print 'undefined' here
    }
};
var f=new Foo();
f.bar('test');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

还有一个jsfiddle一个解释性的答案来解决你的疑问。

于 2014-12-17T10:34:44.793 回答