【进阶】请写出如下代码的打印结果

Posted by ARTROY on 2019-11-05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Foo() {
Foo.a = function() {
console.log(1)
}
this.a = function() {
console.log(2)
}
}
Foo.prototype.a = function() {
console.log(3)
}
Foo.a = function() {
console.log(4)
}
Foo.a();
let obj = new Foo();
obj.a();
Foo.a();

答案: 4 -> 2 -> 1
解析:

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
// 定义 Foo 函数,没有执行
function Foo() {
Foo.a = function() {
console.log(1)
}
this.a = function() {
console.log(2)
}
}
// 在 Foo 挂载原型方法 a
Foo.prototype.a = function() {
console.log(3)
}
// 在 Foo 直接挂载方法 a
Foo.a = function() {
console.log(4)
}
// 执行了 Foo 上的 a 方法, 即直接方法 输入4
Foo.a();
/**
* 创建实例
* 将 全局的 Foo.a 替换 函数体内的 Foo.a 输入 1
* 在新对象(实例)上挂载 this.a 输入 2 (注:新对象上有直接方法 a,故不需要访问原型方法)
*/
let obj = new Foo();
obj.a();
Foo.a();


支付宝打赏 微信打赏

欣赏此文,打赏一下



-->