读代码-构造函数和原型的重名属性

以下代码,执行会输出什么?

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()   // 4
let obj = new Foo()
obj.a() // 2  先看属性有没有,如果属性上没有,会去原型上找
Foo.a() //1

考察原型和原型链

分析

把自己想象成 JS 引擎,你不是在读代码,而是在执行代码 —— 定义的函数如果不执行,就不要去看它的内容

执行输出 `4 2 1`

1

猜你喜欢

转载自blog.csdn.net/m0_38066007/article/details/124990192