如何实现像jQuery一样的链式方法调用
How to implement chained method calls like jQuery?
所以我(仍然)完全爱上了强大的jQuery,并且我有自己的不断增长的实用程序库,我想将其编写在java-script对象中。为了其他前端开发人员的简单性,我希望保持与jquery相似的语法。所以我想要这样写:
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 () .anotherthing ();. 我做了几次尝试,但在这里很挣扎。而且必须有一个非常紧凑的方法来做到这一点。
谢谢大家!
你就快成功了:
new foo('hello').alertTest('world');
或者如果你不喜欢new
:
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')
function $(id){
this.e = document.getelementbyid(id)
me = this
this.val = function (newval) {
this.e.value = newval;
return me; // <- Important
};
return this; // <- Important
}
$("textbox1").val("New Value") // changes textbox1's value to "New Value"
如果对参考有帮助:http://www.mikedoesweb.com/vis/
我做得很快,但你可以联系到我们在这里试图实现的本质-
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已经被弃用了。但是人们还是经常被问到这个问题。
我将实现如下而不使用prototype -
const wrapper = (person) => ({
sayGoodMorning:() => {
console.log("Good Morning, "+person.name)
return wrapper(person);
},
showAlert:() => {
alert("Hey I am alert");
return wrapper(person);
},
sayGoodEvening:() => {
console.log("Good Evening, " + person.name)
return wrapper(person);
},
sayGoodNight:() => {
console.log("Good Night, " + person.name)
return wrapper(person);
},
});
const person = {name:"StackOverflow"};
const $ = (obj) => wrapper(obj);
const $example = $(person);
$example
.showAlert()
.sayGoodMorning()
.sayGoodEvening()
.sayGoodNight();
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- Dijkstra's”;针对GOTO声明的案件“;与函数一样适用于现代调用代码的命名封装
- 我怎么能像调用synch方法一样调用async方法呢
- 如何使pjax:postate像一个简单的pjax调用一样工作
- 有人可以解释我如何像我五岁一样进行 JSONP 调用
- PHP call_user_func像 Javascript 调用一样绑定这个 Arg
- 如何像jquery一样自动调用Javascript中的函数
- 在 JavaScript 中调用函数,就像在 JQuery 中一样
- 原型链接、调用父方法的行为就像父构造函数从未运行过一样
- D3 示例:看起来像一个 JavaScript 变量,但像一个函数一样调用
- 当javascript函数更改html输入文本时,我希望输入文本像调用其他JS函数一样触发事件
- 如何使函数变量像jquery插件一样被调用
- 异步执行某个东西,就像将它推到调用堆栈的后面一样
- 如何实现像jQuery一样的链式方法调用
- 如何在c++中动态调用属性名,就像JS中的方括号符号一样
- 是否有可能使一个对象在Javascript中调用时像函数一样
- 如何使javascript对象像函数一样被调用
- JavaScript像jQuery一样调用变量作为对象和函数
- 调用像函数一样声明的对象