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) を呼び出すと、コンテンツが「未定義」としてログに記録されます。誰か問題を教えてもらえますか?

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.

そして、2番目のシナリオ(プロトタイプ)はどういうわけか異なります.プロトタイプメソッド(とは異なります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 に答える