### 為什么要用this
下面兩段代碼功能是一樣的
```
function identify(){
console.log(this.name.toUpperCase());
}
var me = {name: 'qc'};
identify.call(me);
```
```
function identify(context){
console.log(context.name.toUpperCase());
}
var me = {name: 'qc'};
identify(me);
```
this有時候并不會指向自身,比如函數。函數不具有保存this的功能
```
function foo(){
this.count++;
}
var count = 0;
foo.count = 10;
foo();
//this指向了window
console.log(count); //1
console.log(foo.count); //10
```
如何讓函數中的this指向自身呢?
```
function foo(){
foo.count++;
}
foo.count = 0;
foo();
console.log(foo.count);
```
或者是
```
function foo(){
this.count++;
}
foo.count = 0;
foo.call(foo);
console.log(foo.count);
```
this實際上是在函數被調用時發生的綁定,它指向什么完全取決于函數在哪里被調用,比如在全局作用域調用,this就指向window。
- 你不知道的JS上
- 第一部分 第三章 函數作用域和塊作用域
- 第一部分 第四章 提升
- 第一部分 第五章 閉包
- 第二部分 第一章 關于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 對象
- 第二部分 第五章 原型
- 第二部分 第六章 行為委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函數
- 第一部分 第四章 強制類型轉換
- 第一部分 第五章 語法
- 第二部分 第一章 異步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 總結
- 第二部分 第二章 語法
- 第二部分 第三章 代碼組織
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元編程
- 第二部分 第八章 ES6之后