构造函数 与 原型 与实例化对象 的关系!

 

创建一个构造函数

每个函数里都有一个原型对象, 原型对象内的 constructor 又是函数本身

function per3(name) {
  this.name = name
  this.fn = function (){
    console.log(this.name)
    console.log('我是构造函数')
  }
}

 

 给构造函数的原型对象添加方法

per3.prototype.pfn = function(){
    console.log(this.name)
    console.log('我是proto的方法')
}

 

实例化对象

let p1 = new per3('per3的name')

此时 打印p1  内部有构造函数中定义过的方法以及参数, 

例: 

p1.name   // per3的name

p1.fn()   // per3的name     // 我是构造函数

p1.pfn()

* 当 调用  p1.pfn() 时实例化对象内找不到 参数或方法时, 便会从构造函数中的 原型对象中寻找   就是构造函数中的 prototype

也就是 实例化对象中的 __proto__   

p1.__proto__ === per3.prototype  结果 // true

p1.pfn() //

 

总结:

当程序加载 per3 函数时,会为 per3 构造器创建 per3 原型对象,它们是独立存在的。构造器中有一个 prototype 属性指向了原型对象, 原型对象中有一个 constructor 属性指向构造器, 当 per3 类的实例在使用一个不存在的属性时, 会自动到 per3 构造器的原型对象中去找

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值