原型/构造函数/实列/原型链

一.构造函数原型prototype:

 

构造函数通过原型分配的函数时所有对象所共有的,每一个构造函数都有一个prototype属性,指向另一个对象,(prototype就是一个对象),这个对象的所有属性和方法,都会被构造函数有拥有.

可以就一些不变的方法直接定义在prototype对象上,这样所有的实列就可以共享这些方法.

二.对象原型:

对象都会有一个属性__proto__指向构造函数的prototype原型对象,我们可以使用构造函数prototype原型对象的属性和方法,就是有__protot__原型的存在.

__proto__ 对象原型和原型对象prototype是等价的

__proto__ === 原型

 三.constructor构造函数:

对象原型(__proto__)和构造函数(prototype)原型对象里面都有一个属性constructor属性,我们称之为构造函数,因为它指回构造函数本身.

constructor主要记录该对象引用了那个构造函数,它可以让原型对象重新指向原来的构造函数,

四.构造函数实例和原型对象三角关系:

  1. 构造函数的prototype属性指向构造函数的原型对象
  2. 实列对象是由构造函数创建的,实列对象的__proto__属性指向了构造函数的原型对象.
  3. 构造函数的原型对象的constructor属性指向了构造函数,实列对象的原型的constructor属性也指向了后遭函数.

实例.__proto__ === 原型

原型.constructor === 构造函数

构造函数.prototype === 原型

// 这条线其实是是基于原型进行获取的,可以理解成一条基于原型的映射线
// 例如: 
// const o = new Object()
// o.constructor === Object   --> true
// o.__proto__ = null;
// o.constructor === Object   --> false
// 注意: 其实实例上并不是真正有 constructor 这个指针,它其实是从原型链上获取的
//      instance.hasOwnProperty('constructor') === false  
实例.constructor === 构造函数

五.原型链和成员的查找机制:

任何对象都有原型对象,也就是prototype属性,任何原型对象也就是一个对象,该对象就有proto属性,所以这样一层层往上找,就形成一条链,我们称为原型链.

  • 属性查找机制: 当查找对象的属性时,如果实例对象自身不存在该属性,则沿着原型链往上一级查找,找到时则输出,不存在时,则继续沿着原型链往上一级查找,直至最顶级的原型对象Object.prototype,如还是没找到,则输出 undefined

  • 属性修改机制: 只会修改实例对象本身的属性,如果不存在,则进行添加该属性,如果需要修改原型的属性时,则可以用: b.prototype.x = 2;但是这样会造成所有继承于该对象的实例的属性发生改变。

六.原型对象中的this指向:

不管构造函数中的this还是原型对象的this,都指向我们new出来的实列对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值