理解 JavaScript 中的 this

来源:互联网 发布:淘宝网店铺装修模板 编辑:程序博客网 时间:2024/05/01 09:33

特性: 运行期绑定, 它可以是全局对象、当前对象或者任意对象,完全取决于函数的调用方式。JavaScript 中函数的调用有以下几种方式:作为对象方法调用,作为函数调用,作为构造函数调用,和使用 apply 或 call 调用。


1: 在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,此时该函数被称为该对象的方法,在使用这种调用方式时,this 被自然绑定到该对象。

2: 函数直接被调用,此时 this 绑定到全局对象。

function abc(){    function efg(){        console.log(this);//这个this 绑定到全局对象    }    efg();}abc();

3.JavaScript 支持面向对象式编程,JavaScript 中的构造函数很特殊,如果不使用 new 调用,则和普通函数一样。如果 new 成功,this 绑定到新创建的对象上。作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。


4.在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。

function Point(x, y){     this.x = x;     this.y = y;     this.moveTo = function(x, y){         this.x = x;         this.y = y;     }  }  var p1 = new Point(0, 0);  var p2 = {x: 0, y: 0};  p1.moveTo(1, 1);  p1.moveTo.apply(p2, [10, 10]);//对象P2,调用对象p1的方法, this 绑定到 对象p2 

另一个方法 call 也具备同样功能,不同的是最后的参数不是作为一个数组统一传入,而是分开传入的。


参考; http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

原创粉丝点击