Javascript 如何实现像jQuery这样的链式方法调用?
因此,我(仍然)完全喜欢万能的jQuery,并且我有自己不断增长的实用程序库,我想在java脚本对象中编写它们。为了简化我的其他前端开发人员的工作,我希望保持与jquery类似的语法。所以我想要这样的东西:Javascript 如何实现像jQuery这样的链式方法调用?,javascript,object,Javascript,Object,因此,我(仍然)完全喜欢万能的jQuery,并且我有自己不断增长的实用程序库,我想在java脚本对象中编写它们。为了简化我的其他前端开发人员的工作,我希望保持与jquery类似的语法。所以我想要这样的东西: foo(argument).method(argument); var foo = function(str){ this.str = str; } foo.prototype = { alertTest : function(additional){
foo(argument).method(argument);
var foo = function(str){
this.str = str;
}
foo.prototype = {
alertTest : function(additional){
alert(this.str + ' ' + additional);
}
}
我一直在尝试这样的事情:
foo(argument).method(argument);
var foo = function(str){
this.str = str;
}
foo.prototype = {
alertTest : function(additional){
alert(this.str + ' ' + additional);
}
}
所以foo('hello')。alertTest('world');使用警报“hello world”
我知道这是可能的,但我不是一个OO型的人,需要帮助把这件简单的事情做好。请帮忙。我还打算拥有许多foo().bar();键入函数,如foo().somethingelse();还有foo(),还有一件事。我已经尝试了好几次,但我在这里努力奋斗。此外,必须有一个可怕的紧凑的方式做这件事
谢谢大家 你就快到了:
new foo('hello').alertTest('world');
或者如果您不喜欢新的,
:
var bar = function bar(str) {
this.str = str;
};
bar.prototype = {
alertTest : function(additional){
alert(this.str + ' ' + additional);
return this;
}
};
function foo(str) {
return new bar(str);
}
foo('hello').alertTest('world');
.我不久前做了类似的事情,创造它真是太有趣了 如果我没记错的话,为了能够使用点运算符,我必须将对象作为原始函数调用的一部分返回。通过这种方式,我可以将很多东西链接在一起,比如
$(id).value('asdf').color('ff0000')
函数$(id){
this.e=document.getelementbyid(id)
我=这个
this.val=函数(newval){
该值=newval;
返回我;//我做得很快,但你可以理解我们在这里努力实现的本质-
function ChainingObj() {
if (!(this instanceof ChainingObj)) {
return new ChainingObj();
}
}
ChainingObj.prototype.first = function() {
console.log("foo");
return this; //important to return this.
}
ChainingObj.prototype.second = function() {
console.log("bar");
return this;
}
var a = ChainingObj().first().second();
现在回答这个问题已经很晚了,而且jquery也很不受欢迎。但是人们仍然经常被问到这个问题
我将在不使用原型的情况下实现如下所示-
const wrapper=(person)=>({
早上好:()=>{
console.log(“早上好,”+person.name)
退货包装(人);
},
showAlert:()=>{
警惕(“嘿,我警惕”);
退货包装(人);
},
说晚安:()=>{
console.log(“晚上好,”+person.name)
退货包装(人);
},
道晚安:()=>{
console.log(“晚安,”+person.name)
退货包装(人);
},
});
const person={name:“StackOverflow”};
const$=(obj)=>包装器(obj);
const$example=$(人);
$example
.showarter()
.早上好
.晚安
.说晚安;
但是我不想写'new',我希望对象已经存在。@Freshyeball,太好了,请看我更新的答案。foo
方法必须返回一个对象,如果你想继续链接方法调用。因此你调用的alertTest
函数必须在foo
函数retur的对象上定义ns.稍微改进一下:在警报(this.str)
行之后添加返回此;
将允许您进行大量链接:foo().alert().asdf()
:)@Michael Jasper,非常好的评论。我已经更新了我的帖子以考虑到这一点。