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只是指向当前一层的对象,而不会继承更上面的层。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。