原型(prototype)和原型链

什么是prototype

  • 任何函数都有prototype属性,prototype是英语“原型”的意思。
  • prototype属性值是个对象,它默认拥有constructor属性指回函数

  • 普通函数来说的prototype属性没有任何用处,而构造函数的prototype属性非常有用
  • 构造函数的prototype属性是它的实例的原型

原型链查找

  • JavaScript规定:实例可以打点访问它的原型的属性和方法,这被称为“原型链查找”。

hasOwnProperty

  • hasOwnProperty方法可以检查对象是否真正“自己拥有”某属性或者方法。

in

  • in运算符只能检查某个属性或方法是否可以被对象访问,不能检查是否是自己的属性或方法。

在prototype上添加方法

  • 把方法直接添加到实例身上的缺点:每个实例和每个实例的方法函数都是内存中不同的函数,造成了内存的浪费。

  • 解决办法:将方法写到prototype上。

原型链的终点

  • 原型链的终点就是Object.prototype

关于数组的原型链

继承

两个无关的类

People类和Student类的关系

  •  People类拥有的属性和方法Student类都有,Student类还扩展了一些属性和方法。
  • Student “是一种” People,两类之间是 “is a kind of” 关系。
  • 这就是继承关系:Student类继承自People类

  • 继承描述了两个类之间的 “is a kind of” 关系,比如学生 “是一种” 人,所以人类和学生之间就构成继承关系。
  • People是 “父类”(或 “超类”、 “基类”);Student是 “子类”(或 “派生类”)。

JavaScript中如何实现继承

  • 实现继承的关键在于:子类必须拥有父类的全部属性和方法,同时子类还应该能定义自己特有的属性和方法。
  • 使用 JavaScript特有的原型链特性来实现继承,是普遍的做法。

通过原型链实现继承

  • 示例:

Document


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部