2

これは説明が難しいので、詳細を問うコメントを歓迎します。基本的にjQueryを使用すると、次のことができます。

欲しいもの

$.ajax().etc()
$("selector").doStuff().etc()

これは、$がオブジェクト(チェーン可能)としてだけでなく、関数(チェーン可能)としても機能していることを意味します。

私が持っているもの

私は自分でJavaScriptを作成していて、次のような連鎖可能な関数のセットを正常に作成しました。

myF.func1().func2()
myF('text') //Cannot get this working!

最初の行を機能させるために使用window.myF=(new myFuncs())していますが、myFを関数として使用できません。また、myFを関数として使用できるように作成しましたが、他の関数をチェーンすることはできません。

私は非常に混乱していて、このサイトとグーグルを検索しようとしたのと同じくらい、ここからどこに行けばいいのかわからないので、間違ったものを検索しているに違いありません!

コメントでの質問は歓迎され、期待されています!

マイセットアップ(簡略化)

(function(){
    var myFuncs=function(){

    };

    myFuncs.prototype = {
          foo: function() {
          }
          ,bar: function() {
          }
    }

    window.myF = (new myFuncs());
})();
4

3 に答える 3

3

関数を作成するだけmyFです。jQueryオブジェクトの静的メソッドは、その関数に直接割り当てられます。

(function(exports) {

    exports.myF = function() {
        // This function can return an instance of itself, to make
        // it chainable.
    };

    exports.myF.staticFunction = function() {
        // This is a *static* function, available directly on `myF`
        // in the global space.
    };

})(this);
于 2012-09-01T11:04:50.697 に答える
3

jQueryのソースコードをざっと見てみましたが、jQueryオブジェクトのプロトタイプを使用していないようwindow.$です。

代わりに使用します$.extend

var myF = function(){};
$.extend(myF, {
   actAsAnObject: function(){}
});

ただし、jQuery応答オブジェクトと呼ぶものには、プロトタイプを使用します。したがって、myF()このコードを呼び出すと実行されます。

var myF = function(){
    return new myF.prototype.init(arguments); // based on the jQuery code
};

$.postはオブジェクトプロパティであるため、関数自体を呼び出すと取得できません。$().htmljQuery応答オブジェクト関数であり、window.$オブジェクトのメンバーではありません。


アップデートへの回答:http://jsfiddle.net/rmpW8/

(function(){
    var myFuncExternal = function(num){
        return new myFunc(num);           
    };
    var myFunc = function(num){
        this.num = num;
    };

    $.extend(myFuncExternal, {
        foo: function(num){
            console.log("In foo with: " + num);
        }
    })

    myFunc.prototype = {
          foo: function() {
              myFuncExternal.foo(this.num);
          },
          bar: function() {
              console.log("In bar with: " + this.num)
          }
    }

    window.myF = myFuncExternal;
})();
于 2012-09-01T11:20:53.397 に答える
2

あなたはこのようなことをするでしょう:

myF = function () {
  ...
}
myF.method1 = function (){
  ...
}
myF.method2 = function (){
  ...
}
...

Javascriptでは、データ自体が「オブジェクト」でなくても、すべてのデータがプロパティを持つことができること覚えておく必要があります。したがって、文字列、数値、関数、これらすべてにプロパティを設定できます(実際に設定できます)。たとえば、文字列にはプロパティがありますlength

于 2012-09-01T11:10:29.627 に答える