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

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读代码-构造函数和原型的重名属性相关的知识,希望对你有一定的参考价值。

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

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

以上是关于读代码-构造函数和原型的重名属性的主要内容,如果未能解决你的问题,请参考以下文章

读Secrets of the JavaScript Ninja对象

JS高级---实例对象和属性重名问题

面向对象中构造函数,原型对象和实例的关系图

浅谈js原型与原型链

js组合继承(原型继承+借用构造函数继承)

JavaScript创建对象的默认方式:组合使用构造函数模式和原型模式