js的原型链及个人见解

原型对象

每个对象都有一个原型 prototype 对象,通过函数创建的对象也将拥有这个原型对象。原型是一个指向对象的指针。
  • 可以将原型理解为对象的父亲(类似java的继承),对象从原型对象继承来属性
  • 所有函数的原型默认是 Object的实例,所以可以使用toString/toValues/isPrototypeOf 等方法的原因
  • 使用原型对象为多个对象共享属性或方法
  • 如果对象本身不存在属性或方法将到原型上查找
  • 使用原型可以解决,通过构建函数创建对象时复制多个函数造成的内存占用问题
  • 原型包含 constructor 属性,指向构造函数
  • 对象包含 proto 指向他的原型对象
prototype

无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,默认情况下prototype属性会默认获得一个constructor(构造函数)属性

function lst(){
    this.name = "lst";
    this.fn = function(){}
}
var lst01 =new lst();
console.log(lst01);

在这里插入图片描述

当实例创建时会自动获得prototype属性,prototype是一个对象,也生成一个构造器,属性指向Object顶层对象
对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

通过prototype 可以为对象添加方法或属性,因为原型链的顺序是,从第一个对象一层层向上寻找,当子类有这个属性便不再往上寻找,子类的相同方法会覆盖父类的同名方法。

例:bootstrapTable.prototype.add =… ,为bootstrapTable这个对象添加了add方法,覆盖了原方法,

在这里插入图片描述

下面这个例子可以形象的显示原型链
在这里插入图片描述

__proto__与prototype的区别

个人认为 proto 函数使用 ,prototype实例后使用
在这里插入图片描述

ES6新增的class本质其实是原型的语法糖

//es5
Person.prototype.getInfo=function(){
}
//es6               
class Person{                 
 getInfo(){},                 
 toString(){}
 }
 //等同于
 Person.prototype={
 getInfo(){},                 
 toString(){}
 }
 //还可以通过Object.assign()方法
 Object.assign(Person.prototype,{
  getInfo(){},                 
  toString(){}
 });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值