JS编程建议——68:推荐使用链式语法

建议68:推荐使用链式语法
使用过jQuery框架的读者,都会对jQuery简洁的语法、灵巧的用法赞叹不已,其中一个最大亮点就是jQuery的链式语法。在JavaScript中,很多方法没有返回值,一些设置或修改对象的某个状态却不返回任何值的方法就是典型的例子。如果让这些方法返回this,而不是undefined,那么就要启用级联功能,即所谓的链式语法。在一个级联中,单独一条语句可以连续调用同一个对象的很多方法。
getElement('box').

move(350, 150).
width(100).height(100).
color('red').
border('10px outset').
padding('4px').
appendText("使用链式语法")

在上面代码中,getElement函数获取id='box'的DOM元素,然后通过链式语法分别调用DOM元素的扩展方法来移动元素、修改尺寸和样式,以及添加行为。由于每一个扩展方法都返回参数对象,所以调用返回的结果可以为下一次调用所用。链式语法可以产生具备很强表现力的接口,以产生出试图一次做很多事情的接口的趋势。
在下面示例中,分别为String扩展了3个方法:trim、writeln和alert,其中writeln和alert方法返回值都为this,而trim方法返回值为修剪后的字符串。这样用户就可以利用链式语法在一行语句中快速调用这3个方法。
Function.prototype.method = function(name, func) {

if(!this.prototype[name]) {
    this.prototype[name] = func;
    return this;
}

};
String.method('trim', function() {

return this.replace(/^\s+|\s+$/g, '');

});
String.method('writeln', function() {

document.writeln(this);
return this;

});
String.method('alert', function() {

window.alert(this);
return this;

});
var str = " abc ";
str.trim().writeln().alert();

时间: 2024-09-28 08:51:13

JS编程建议——68:推荐使用链式语法的相关文章

JS编程建议——23推荐提高条件性能的策略

建议23:推荐提高条件性能的策略与循环相似,条件表达式决定JavaScript 运行流的走向.与其他语言一样,JavaScript也采用了if 和switch 两种条件结构.由于不同浏览器针对流程控制进行了不同的优化,因此两者在性能上并没有特别大的差异,主要还是根据需求形式进行分析和选择:条件数量较大,建议选择switch 结构,而不是if结构,这样可以使代码更易读:如果条件较少时,建议选择if结构. //条件少 if(found) { //执行代码 } else { //执行代码 } //条件

JS编程建议——59:推荐动态调用函数

建议59:推荐动态调用函数调用函数更便捷的方式是使用Function对象的call和apply方法.apply与call方法在本质上没有太大区别,只不过它们传递给函数的参数方式不同, apply是以数组形式进行参数传递,而call方法可以同时传递多个值.如果某个函数仅能够接收多个参数列表,而现在希望把一个数组的所有元素作为参数进行传递,那么使用apply方法就显得非常便利.function max(){ var m = Number.NEGATIVE_INFINITY; // 声明一个负无穷大的

JS编程建议——77:推荐作用域安全的构造函数

建议77:推荐作用域安全的构造函数构造函数其实是一个使用new运算符的函数.当使用new调用时,构造函数的内部用到的this对象会指向新创建的实例.function Person(name, age, job) { this.name = name; this.age = age; this.job = job; }var person = new Person("Nicholas", 34, 'software Engineer');在没有使用new运算符来调用构造函数的情况下,由于

JS编程建议——21:推荐提高循环性能的策略(2)

建议21:推荐提高循环性能的策略(2)在每个循环中,每次运行循环体都要发生如下操作:第1步,在控制条件中读一次属性(items.length).第2步,在控制条件中执行一次比较(i < items.length).第3步,比较操作,观察条件控制体的运算结果是不是true(i < items.length == true).第4步,一次自加操作(i++).第5步,一次数组查找(items[i]).第6步,一次函数调用(process(items[i])).在这些简单的循环中,即使没有太多的代码,

JS编程建议——21:推荐提高循环性能的策略(1)

建议21:推荐提高循环性能的策略(1)每次运行循环体时都会产生性能开销,增加总的运行时间,即使是循环体中最快的代码,累计迭代上千次,也将带来不小的负担.因此,减少循环的迭代次数可获得显著的性能提升.例如: var iterations = Math.floor(items.length / 8), startAt = items.length % 8, i = 0; do { switch(startAt) { case 0: process(items[i++]); case 7: proce

JS编程建议——37:推荐使用replace(1)

建议37:推荐使用replace(1)String对象的replace方法包含两个参数,第一个参数表示执行匹配的正则表达式,也可以传递字符串,第二个参数表示准备代替匹配的子字符串,例如,把字符串html替换为htm. var b = s.replace("html", "htm" ); 与search和match方法不同,replace方法不会把字符串转换为正则表达式对象,而是以字符串直接量的文本模式进行匹配.第二个参数可以是替换的文本,或者是生成替换文本的函数,把

JS编程建议——37:推荐使用replace(2)

建议37:推荐使用replace(2)在上面的示例代码中,函数f()的参数为特殊字符"$1",它表示正则表达式/(bw+b)/中小括号每次匹配的文本.然后在函数体内对这个匹配文本进行处理,截取其首字母并转换为大写形式,之后返回新处理的字符串.replace方法能够在原文本中使用这个返回的新字符串替换每次匹配的子字符串.对于上面的示例,可以使用小括号来获取更多匹配文本的信息.例如,直接利用小括号传递单词的首字母,然后进行大小写转换处理: var s = 'script language

JS编程建议——71:推荐分支函数

建议71:推荐分支函数分支函数解决的一个问题是浏览器之间兼容性的重复判断.解决浏览器之间的兼容性的一般方式是使用if逻辑来进行特性检测或能力检测,根据浏览器不同的实现来实现功能上的兼容,这样做的问题是,每执行一次代码,可能都需要进行一次浏览器兼容性方面的检测,这是没有必要的.能否在代码初始化执行的时候就检测浏览器的兼容性,在之后的代码执行过程中,就无须再进行检测了呢?答案是:能.分支技术就可以解决这个问题,下面以声明一个XMLHttpRequest实例对象为例进行介绍.var XHR = fun

JS编程建议——78:正确理解执行上下文和作用域链

建议78:正确理解执行上下文和作用域链执行上下文(execution context)是ECMAScript规范中用来描述 JavaScript 代码执行的抽象概念.所有的 JavaScript 代码都是在某个执行上下文中运行的.在当前执行上下文中调用 function会进入一个新的执行上下文.该function调用结束后会返回到原来的执行上下文中.如果function在调用过程中抛出异常,并且没有将其捕获,有可能从多个执行上下文中退出.在function调用过程中,也可能调用其他的functi