Javascript模式:调用多个方法
javascript pattern: calling multiple method
我在谷歌上搜索过,并阅读了许多关于js模式的文章,我很困惑。我在stackoverflow上搜索,仍然很困惑。所以,我想我必须在这里问一下。(我还是个javascript新手)
我想"创建模块、单例或其他模式,然后同时滚动/调用多个方法"。
示例:Yourlib.getId('elmID').setColor('somecolor').setHtml('somehtml').show().blaa.blaa.blaa
如何创建基本模式?
var Yourlib = (function() {
var anyPrivateVar = blablabla;
anyFunctions(){
any stuff...
}
return {
setHtml: blablabla,
method2: function() {
anything...
}
getId: function() {
anything...
},
setColor: function() {
anything...
},
show: function() {
anything...
}
}
}())
如何创建模式,所以我可以调用/滚动方法在同一时间?Yourlib.getId('elmID').setColor('somecolor').setHtml('somehtml').show().blaa.blaa.blaa
此模式有时被称为" chainaining ",或者,当用于最终将构造其他类的选项类时,称为"builder"模式。
基本上,这样做的方法是让每个函数返回一个对象,该对象可以调用后续方法(通常该对象与当前方法调用的对象相同)。
在JavaScript中,你可以这样做:
var Point = function(x, y) {
this.x = x;
this.y = y;
};
var PointBuilder = function() {
this.x = null;
this.y = null;
};
PointBuilder.prototype.setX = function(x) {
this.x = x;
return this; // <= so that one can call .setY() on the result
};
PointBuilder.prototype.setY = function(y) {
this.y = y;
return this; // <= so that one can call .setX() on the result
};
PointBuilder.prototype.build = function() {
return new Point(this.x, this.y);
};
上面的代码是一个简单的例子,但是您可以理解其中的意思。基本上,从你的方法中返回this
或返回其他提供剩余可用方法的对象。
我想你是在要求链接方法。这里有一个简单的例子。关键是return
对象返回。
var obj = {
method1: function() { alert('first'); return obj; },
method2: function() { alert('second'); return obj; },
method3: function() { alert('third'); return obj; },
method4: function() { alert('fourth'); return obj; }
}
obj.method1().method2().method3().method4();
现场演示
这被称为方法链接,在jQuery中大量使用。您只需在您希望能够链接的方法中返回当前上下文:
show: function() {
// allow chaining
return this;
}
你也应该看看"fluent" api。我个人不太看重流畅的api,但人们确实喜欢他们的阅读方式,尤其是在编写测试时。
链接也是一种"延迟"实际计算的好方法(一种延迟计算)-参见underscore的_.chain()方法与它的value()方法[我不认为underscore实际上做了什么太花哨的事情]
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- javascript从子方法调用父方法
- 我应该返回一个类似console.log()的方法调用吗
- NodeJS-从同一文件中的另一个方法调用一个方法
- 使用restangular save方法调用put与post时的控件
- 从实例方法调用实例方法
- Node.js-异步方法调用问题
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 向模板实例变量传递调用方法调用的结果时出现异常
- jQuery 方法调用了两次
- 不能从 Backbone.View 的方法调用 Backbone.collection 的方法,其中包含 require
- 组合 onLayout 的方法调用
- lodash/下划线 - 使用绑定与方法调用和方法保持未绑定
- 从公共方法调用模块的私有函数
- 如何对 jqGrid 的 loadComplete 和 onSelectRow 进行基因预和后方法调用
- 完全限定的 JavaScript 方法调用
- 为什么我在 Angular JS 中收到两个方法调用
- 如何在从排序方法调用参数时将其传递给回调
- 使用两种不同的方法调用方法
- 如何在 javascript 中更改方法调用的全局范围