this 指向问题
参考知识点:
# 1 字节:解释以下代码的输出
var name = "bytedance";
function A() {
console.log(age);
this.name = 123;
var age = 2;
console.log(this.name)
console.log(this.age);
}
A.prototype.getA = function(){
console.log(this.name);
console.log(this);
}
let a = new A();
let funA = a.getA;
funA();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
undefined
123
undefined
bytedance
Object [window]
1
2
3
4
5
2
3
4
5
- 第 13 行,
new
一个A
的实例,程序开始执行A()
- 第 3 行,由于第 5 行的变量声明
var age
被提升至 函数顶端,因此此处 输出undefined
- 第 6 行,判断
this
指向的是a
实例,此处 输出定义的this.name
即 123 - 第 7 行,由于
this
指向的a
实例没有name
属性,因此此处 输出undefined
- 第 14 行,将
a.getA
作为一个函数对象赋值给变量funA
并在第 15 行直接调用,程序开始执行getA()
- 第 10 行,判断
this
指向的是全局对象window
,因此此处 输出全局对象的name
属性,而var
定义的全局变量为全局对象的属性,即输出"bytedance"
- 第 11 行,同上,此处 输出全局对象
window
提示
函数对象自带 name
属性,且值为本身的名称,如 A.name
返回 "A"
。
在 GitHub 中编辑此页 (opens new window)
上次更新于: 2022/11/3 23:25:22