方法链:当方法的返回值是一个对象时,这个对象还可以再调用它的方法。这种方法调用序列中,每次调用的结果都是另外一个表达式的组成部分。
比如:基于jQuery库,我们通常会写类似如下代码:
$(this).next().show().siblings("li[class!=header]").hide();
如果在设计的API中,每个方法都返回this,使用API就可以进行“链式调用”风格的编程。在这种风格的编程中,只要指定一次调用的对象,余下的方法都可以基于此方法进行调用:
shape.setX(100).setY(200).setSize(300);
注意:this是一个关键字,不是变量,也不是属性名,不可以给this赋值。
和变量不同,this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,其this的值指向调用它的对象;如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式),就是undefined(严格模式)。
调用嵌套函数时,this并不会指向调用外层函数的上下文。如果想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数在同一个作用域内。通常用self变量保存this,如:
var o={ m:function(){ var self=this; console.log(this===o);//true f(); function f(){ console.log(this===o);//false console.lgo(self===o);//true } } }; o.m();