方法链、作用域链和原型链(一)——方法链

方法链:当方法的返回值是一个对象时,这个对象还可以再调用它的方法。这种方法调用序列中,每次调用的结果都是另外一个表达式的组成部分。

比如:基于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();
原文地址:https://www.cnblogs.com/aaron-shu/p/4184849.html