问答题1093/1588说说下面代码的输出是什么?

1function Foo(){ 2 Foo.a = function(){ 3 console.log(1); 4 } 5 this.a = function(){ 6 console.log(2) 7 } 8} 9 10Foo.prototype.a = function(){ 11 console.log(3); 12} 13 14Foo.a = function(){ 15 console.log(4); 16} 17 18Foo.a(); 19let obj = new Foo(); 20obj.a(); 21Foo.a();
难度:
2023-05-31 创建

参考答案:

运行以上代码,输出结果为:

4
2
1

解析如下:

  1. 首先,调用 Foo.a() 方法,输出 4。这是因为 Foo.a 是一个静态方法,直接在函数对象上定义的,所以可以通过函数名直接调用执行。

  2. 然后,创建一个 Foo 类型的实例 obj,调用 obj.a() 方法,输出 2。这是因为在构造函数 Foo 中,使用 this.a 定义了实例属性 a,会覆盖原型中的同名属性。

  3. 最后,再次调用 Foo.a() 方法,输出 1。虽然在上面已经定义了一个静态方法 Foo.a,但是在构造函数 Foo 中又重新定义了一个同名属性,导致静态方法被覆盖了,所以此时输出的是在构造函数中定义的方法。

最近更新时间:2024-07-19

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!