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