Javascript 如何实现像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){

因此,我(仍然)完全喜欢万能的jQuery,并且我有自己不断增长的实用程序库,我想在java脚本对象中编写它们。为了简化我的其他前端开发人员的工作,我希望保持与jquery类似的语法。所以我想要这样的东西:

 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,非常好的评论。我已经更新了我的帖子以考虑到这一点。