this 是什么

this是一个特别的关键字 this可以用在构造函数之中,表示实例对象 this总是返回一个对象
简单说,this就是属性或方法“当前”所在的对象

var person = {
  name: 'Rookie',
  method: function () {
    return '姓名:'+ this.name;
  }
};

person.method()   //"姓名:Rookie"

this.name表示name属性所在的那个对象。由于this.name是在method方法中调用,而method方法所在的当前对象是person,因此this指向person,this.name就是person.name。


因为对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的 ----> this的指向是可变的

var A = {
  name: 'Rookie',
  method: function () {
    return '姓名:'+ this.name;
  }
};

var B = {
  name: 'BDD'
};

B.method= A.method;
B.method()   // "姓名:BDD"

使用场景

(1)全局环境

全局环境使用this,它指的就是顶层对象window

this === window // true

function f() {
  console.log(this === window);
}
f() // true

不管是不是在函数内部,只要是在全局环境下运行,this就是指顶层对象window


(2)构造函数

构造函数中的this,指的是实例对象。

var Obj = function (e) {
  this.e = e;
};
var n=new Obj('HOLA');
console.log(n.e);

this指向实例对象,所以在构造函数内部定义this.e,就相当于定义实例对象有一个e属性。


(3)对象的方法

如果对象的方法里面包含this,this的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。

var obj ={
  foo: function () {
    console.log(this);
  }
};

obj.foo() // obj

obj.foo方法执行时,它内部的this指向obj

var a = {
  p: 'Hello',
  b: {
    m: function() {
      console.log(this.p);
    }
  }
};

a.b.m() // undefined

如果this所在的方法不在对象的第一层,这时this只是指向当前一层的对象,而不会继承更上面的层。


RoOK1E
0 声望4 粉丝

« 上一篇
RegExp对象
下一篇 »
严格模式