关于原型的 JS 题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function Foo() {
getName = function () {
console.log(1)
};
return this;
}

Foo.prototype.getName = function () {
console.log(2)
}
Foo.getName = function () {
console.log(3)
}
var getName = function () {
console.log(4)
}

function getName() {
console.log(5)
}
getName()
Foo.getName()
Foo().getName()
new Foo.getName()
getName()
new Foo().getName()
new new Foo().getName()

答案:4 3 1 3 1 2 2

1.getName()

function 和 var 都会提升,function 作为第一公民,比 var 优先级更高,所以 var 会覆盖 function

2.Foo.getName()

第十一行代码将 Foo 的 getName 方法指向了一个新的函数,所以 Foo.getName 调用的是新的函数

3.Foo().getName()

Foo() 执行的时候,将 window 的 getName 方法改写,并且 Foo 的 this 就是 window,所以调用的是 window.getName

4.new Foo.getName()

本质还是执行的 Foo.getName()

5.getName()

由于之前执行了 Foo() getName 被改写,现在执行的是被改写后的 getName()

6.new Foo().getName()

创造了 Foo 的实例,执行 getName 顺着原型链向上找到 Foo.prototype.getName()

7.new new Foo().getName()

同 6


关于原型的 JS 题
https://l1ushun.github.io/2024/07/28/this-topic/
作者
liu shun
发布于
2024年7月28日