美文网首页
javaScript 中的继承

javaScript 中的继承

作者: BitterOutsider | 来源:发表于2020-02-07 21:05 被阅读0次

概要

  1. 继承的作用就是让代码拥有更好的复用性。
  2. 用原型链实现 javaScript 中的继承。
  3. 用 ES6 的 class 和 extends 改写代码。

原型链实现继承

实现 Asian 继承 Human。

私有属性 公有属性
Human name
birhday
species
act
useTool
Asian city bodyColor

Human 的构造函数:

function Human(option){
  this.name = option.name;
  this.birthday = option.birthday
}
Human.prototype.species = 'human'
Human.prototype.act = function(){/*行动*/}
Human.prototype.useTools = true

Asian 的构造函数:

function Asian(option){
  this.city = option.city
}
Asian.prototype.bodyColor = 'yellow'

继承:

在 Asian 的构造函数中 call Human 的构造函数,将 Asian 的 this 和 option传入。
将 Asian 的 proptotype 的原型指向 Human 的 protptype。

function Asian(option){
+ Human.call(this, option)
  this.city = option.city
}
+ Asian.prototype.__proto__ = Human.prototype

改进

  1. new Human
    在生产环境中不会去直接修改 __proto__,会带来一些隐患,而且浏览器也会给出警告。但又如何实现 Asian.prototype.__proto__ = Human.prototype
    在 new Human 时候,会运行以下代码:
{
  this = {}
  this.__proto = Human.prototype
  return this
}

由此可以这样写 Asian.prototype = new Human({name: '', birthday: ''})
其中 Asian.prototype === this(里面 return 的 this)
所以 Asian.prototype.__proto__ === this.__proto === Human.prototype
Asian.prototype.__proto__ === Human.prototype

  1. fakeHuman
    以上会在 Asian.prototype.proto 中生成空白字符 name 和 birthday,所以我们需要一个 fakeHuman。
function fakeHuman(){}
fakeHuman.prototype = Human.prototype
Asian.prototype = new fakeHuman
  1. 一个简单的方法(不兼容IE浏览器)
Asian.prototype = Object.create(Human.prototype)

ES6 中的继承

ES6 中引入了 class 和 extends 模拟 java 类的实现和继承。其本质还是 function。
缺点在于用 class 声明的函数不能 call 只能 new。这东西不像函数又不是类,就很奇怪。

class Human{
  constructor(option){
    this.name = option.name;
    this.birthday = option.birthday
  }
  act(){/*行动*/}
  species = 'human'
  useTools = true
}

class Asian extends Human{
  constructor(option){
    super(option)
    this.city = option.city
  }
  bodyColor = 'yellow'
}

var people = new Asian({city: '北京', name: 'Frank', birthday: '2000-10-10'})

完。

相关文章

  • 函数的原型对象

    什么是原型? 原型是Javascript中的继承的继承,JavaScript的继承就是基于原型的继承。 函数的原型...

  • 一文带你彻底理解 JavaScript 原型对象

    一、什么是原型 原型是Javascript中的继承的基础,JavaScript的继承就是基于原型的继承。 1.1 ...

  • Web前端经典面试试题及答案2

    javascript面向对象中继承实现? 面向对象的基本特征有:封闭、继承、多态。在JavaScript中实现继承...

  • 深入理解javascript中的继承机制 之 12种继承模式总结

    之前我们介绍了多种javascript中的继承方式,最后我们开始总结概括这些继承方式,先将javascript中的...

  • JavaScript - 继承和类

    JavaScript - 继承和类 在这一篇中,我要聊聊 JavaScript 中的继承和“类”。 首先跟你请教下...

  • Javascript中的继承

    很多语言中都有继承的概念,继承这种东西为什么会出现? 简而言之,继承之所以出现,就是为了减少重复无用功。好比爸爸有...

  • JavaScript 中的继承

    JS 继承机制的设计思想 Brendan Eich, 借鉴 C++ 和 Java ,把 new 命令引入了 JS,...

  • JavaScript 中的继承

    摘要:继承是面向对象思想中的重要概念,虽然严格来说 JavaScript 并属于面向对象类型的语言,但最终还是在E...

  • JavaScript 中的继承

    作者 魏楷聪 发布于 2015年01月20日 1) 对象冒充(支持多重继承) 2) call方法方式 call方法...

  • javascript中的继承

    继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法...

网友评论

      本文标题:javaScript 中的继承

      本文链接:https://www.haomeiwen.com/subject/ujmvxhtx.html