this是JavaScript语言中的一个关键字,指代在函数运行时生成的一个内部对象,this只能在函数内部被调用。
由于函数的运行场景不同,this的指向也是不同的,但总体上就是谁调用了这个函数,this的指向就是谁。
例如:`obj.sayHello()`
这里的this指向就是obj这个对象。
以下总结几种this的指向情况:
1、当一个函数自执行时,this是指向全局对象的,即window对象。
```
function Person() {
this.name = 'ice';
console.log(this);
}
``
2、全局作用域中的this是指向window的。
```
var name = 'ice';
function sayName() {
console.log(this.name);
}
sayName();
```
3、调用call/apply方法可以改变this的指向。
```
var obj = {
name: 'ice',
age: 18,
sex: 'male'
}
function sayHello() {
console.log(this);
}
sayHello.call(obj);//此时函数内部的this是指向obj的
sayHello.apply(obj, arguments);
```
4、当一个对象调用这个函数时,函数内部的this是指向这个对象的。
```
var name = '222';
var a = {
name : '111',
say : function() {
document.write(this.name);
}
}
var fun = a.say;
fun();
a.say();
var b = {
name : '333',
say : function (fun) {
fun();
}
}
b.say(a.say);//取a.say的函数体,不等于a.say()执行
b.say = a.say;
b.say();
//依次会输出222111222333
```
5、构造函数内部的this。此时的this指向由这个构造函数生成的新对象。
```
function Person(name) {
this.name = name;
}
var person = new Person('ice');
console.log(person.name);
```
随着es6语法的普及,新特性箭头函数避免了很多因为this指向问题而产生的坑,在箭头函数中this永远指向函数定义时的环境,而不是函数执行时的环境,但有时this的使用也为我们的开发带来了方便。所以还是要好好去理解的~
JavaScript中的this
最新推荐文章于 2023-02-09 12:54:59 发布