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

Just make your myF a function. The static methods on the jQuery object are just assigned to that function directly.

(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是一个对象属性,如果调用函数本身就无法获取。$().html是一个jQuery响应对象函数,它不是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 回答