构造函数、原型、constructor、原型链

56 阅读2分钟

一、构造函数原型 prototype

1、每一个构造函数中都有 prototype 属性,指向另一个对象,prototype就是一个对象,这个对象的所有属性和方法都会被构造函数所拥有 2、实际应用中,我们将不变的方法,直接定义在prototype对象上,所有对象的实例都可以共享这些方法 3、共享属性定义在构造函数里,公共方法定义在原型对象里

原型是什么?

一个对象,我们称之prototype为原型对象

原型作用是什么?

共享方法

二、对象原型__proto__

对象身上都有一个__proto__属性,其指向prototype原型对象

对象可以使用构造函数prototype上的属性方法,因为__proto__存在,并指向prototype

__proto__和原型对象prototype等价关系

方法查规则: 先看对象上身上是否有其方法,如果有直接使用,如果没有,因为__proto__的存在,就去构造函数原型对象prototype去找查该方法

三、constructor构造函数

对象原型__proto__和构造函数prototype 都有一个属性 constructor 我们也可称constructor为构造函数,因为他指回构造函数本身

四、构造函数、原型、constructor之间的关系

image.png

五、原型链

1、只要是对象,就有__proto__原型,并指向原型对象 2、原型对象里面的__proto__,指向Object.prototype 3、Object.prototype里面的__proto__,指向null

总结: 对象实例__proto__指向原型对象的prototype,原型对象的__proto__指向Object.prototype Object.prototype通过_proto__指向null 形成一条链

六、JS成员查找机制(规则)

  1. 当访问一个对象的属性或方法时,首先查找这个对象自身有没有该属性
  2. 如果没有就查找他的原型(也就是__proto__指向的prototype原型对象)
  3. 如果还没有就查找原型对象的原型(Object的原型对象)
  4. 依此类推一直找到Object为止(null)
  5. __proto__对象原型的意义就在于为对象成员查找机制提供一条路线

*仅作学习笔记