123456789101112131415161718function 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 解析: 123456789101112131415161718192021222324252627// 定义 Foo 函数,没有执行function Foo() { Foo.a = function() { console.log(1) } this.a = function() { console.log(2) }}// 在 Foo 挂载原型方法 aFoo.prototype.a = function() { console.log(3)}// 在 Foo 直接挂载方法 aFoo.a = function() { console.log(4)}// 执行了 Foo 上的 a 方法, 即直接方法 输入4Foo.a(); /** * 创建实例 * 将 全局的 Foo.a 替换 函数体内的 Foo.a 输入 1 * 在新对象(实例)上挂载 this.a 输入 2 (注:新对象上有直接方法 a,故不需要访问原型方法) */let obj = new Foo();obj.a();Foo.a(); Previous Post → ← Next Post 赏 支付宝打赏 微信打赏 欣赏此文,打赏一下 标签 面试 进阶 参与社区 Segmentfault 王小匠 掘金 王小匠 CSDN Blog 王小匠