0

最初に - 私のひどい英語で申し訳ありません。私はそれを練習しなければならず、最善を尽くします。

JavaScriptで何か新しいことを試してみます。私はjQueryライブラリでアイデアを得ました。二つあります

「jQuery」または「$」を操作するさまざまな方法。

jQuery(arg).foo(); // first way
jQuery.foo();      // second way

今、私はオブジェクトで同じことをしたいと思っていました。

obj(arg).foo();
obj.foo();

私の最初の質問は、どうすれば jQuery をオブジェクトを返す関数にして、オブジェクトにすることができるかということでした。

同じ方法 ?

obj(arg).foo(); 

オブジェクトを返す関数のようです。しかし

obj.foo();

物のようです。

obj.foo() と obj().foo() を操作しようとしましたが、何も機能しませんでした - いずれにせよ、エラーが返されたものを試してみました: foo() は未定義です。

この異常な方法で変数jQueryを登録するために、jQueryがどのようにそれを解決したか知っていますか?

以下は私が実現したいものです(コードは機能しません!):

myClass = function () {
   this.foo() {
      window.alert('foo()!');
      return this;
   }
}
var myObj = new myClass();
function obj() {
    return myObj.foo(arguments);
}

var obj = {
            secondFoo : function () {
                                        myObj.foo();
                                    }  
          };


obj('arg').foo();     // alert(foo()!) && alert(foo()!)
obj.secondFoo();      // alert(foo()!)
obj('arg');           // alert(foo()!)
4

2 に答える 2

2

これは、jQueryがどのようにそれを行うかを示す小さなフィドルです(正確ではありませんが、コアロジックはそこにあります)http://jsfiddle.net/UD2Mv/1/

基本的に、関数呼び出しが何かを返すことが期待されない限り、jQuery は常にそれ自体 (実際には jQuery オブジェクトではなく、jQuery.fn のインスタンス) を返しました。

それ自体を返すため、すべてのプロパティとメソッドが返され、チェーンとして利用できます。jQueryが行うトリックは、要素をこの中に格納することですが、配列のように整数キーを使用します。

この行の例で私がしていることはどれですか

this[0] = document.getElementById(id);

これは、要素が保存され、これの一部であるすべてのメソッドで使用できるようになったことを意味します。したがって、colorMe を呼び出すと、this[0] が対象の要素を取得します。

ここにコードがあります

function wrap(id) {
    return new wrap.init(id);
};

wrap.init = function(id) {
    this[0] = document.getElementById(id);
    return this;
};

wrap.init.prototype = {
    colorMe: function(color) {
        this[0].style.color = color;
        return this;
    }
};

$(function() {
    wrap('boo').colorMe('red');
});
于 2012-04-26T12:33:51.967 に答える
1

Javascript では、すべての関数もオブジェクトです。

あなたは書ける

someFunction.someProperty = function() { ... };

someFunction.someProperty();
于 2012-04-26T12:23:05.893 に答える