javascript中的this

    xiaoxiao2022-07-03  107

    this的指向分为4种:

    作为对象的方法调用:

    var obj = { a: 1, getA: function(){ console.log(this == obj); console.log(this.a); } } obj.getA();

    当函数作为对象的方法被调用时,this指向的是一个局部对象,即当前的这个对象;

    作为普通函数调用:

    global.name = 'globalName'; var getName = function(){ return this.name; }; console.log(getName()); // 输出: globalName //或者 global.name = 'globalName'; var myObject = { name: "sven", getName: function(){ return this.name; } } var getName = myObject.getName; console.log(getName()); //globalName

    当this在普通函数里面被用到时,this指向的是一个全局对象,在浏览器上是window,在nodejs上是global

    构造函数调用:

    var MyClass = function(){ this.name = "sven"; } var obj = new MyClass(); console.log(obj.name);

    构造函数的外表和普通函数一样,它们主要区别于调用的方式,构造函数需要用new运算符,在这里this指向的是一个局部对象,即这个返回的对象

    Function.prototype.call或Function.prototype.apply的调用:

    var obj1 = { name: 'sven', getName: function(){ return this.name; } }; var obj2 = { name: 'anne', }; console.log(obj1.getName()); //输出:sven console.log(obj1.getName.call(obj2)); //输出:anne

    与普通函数不一样,call和apply可以动态地修改this的指向

    博客内容参考自JavaScript设计模式与开发实践,[p24-p27]

    最新回复(0)