这很难解释,所以我欢迎评论查询细节。基本上使用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());
})();
答案 0 :(得分:3)
让你的myF
成为一个功能。 jQuery对象上的 static 方法只是直接分配给该函数。
(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);
答案 1 :(得分: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;
})();
答案 2 :(得分:2)
你会做这样的事情:
myF = function () {
...
}
myF.method1 = function (){
...
}
myF.method2 = function (){
...
}
...
在Javascript中,您必须记住, ANY 数据本身可以具有属性,即使它不是“对象”。所以字符串,数字,函数,所有这些都可以(并且确实)具有属性。例如,字符串具有属性length
。