千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  行业资讯  >  郑州Web前端进阶课之JS继承实现方式解析

郑州Web前端进阶课之JS继承实现方式解析

来源:千锋教育
发布人:Yolanda
时间: 2020-03-12 14:38:00

  JS是Web前端三要素之一,也是每一个初学前端的同学遭遇的第一条拦路虎。很多人反应JS学习不易,各类知识点概念及应用常常让人抓耳挠腮。在接下来的郑州Web前端进阶课中,千锋小编就给大家简单介绍一下JS的继承方式。

图片3

  什么是继承?

  继承就是让一个类型(可以通过构造函数或者class来定义)的对象能够访问另外一个类型的属性和方法,它是类和类之间的一种关系,通常说子类继承父类。但这里容易出现一个误区:认为实例继承了某个类,某人有响应的属性和方法是因为他继承人类,这种说法是错误。

  实现继承的方式有很多种,本次课程中小编给大家分享四种:借助构造函数实现继承、原型继承、组合继承、ES6继承。

  1、借助构造函数实现继承

  function Person(name,age){ //定义了一个父类

  this.name = name;

  this.age = age;

  this.sayHello = function(){

  console.log(this.name);

  }

  }

  function Male(name,age){ //定义了一个子类 男性类

  //继承父类,让子类具有相应的属性和方法

  //call或者apply的用法

  //构造函数里的this指向实例

  Person.call(this,name,age);

  this.hx = "true";//除了继承过来的属性和方法,还能添加针对于子类自身的属性和方法

  }

  function FeMale(name,age){ //定义了一个子类 女性类

  Person.call(this,name,age);

  this.hj = "no";

  }

  var male = new Male("chenjinfeng",20);

  male.sayHello();

  2、原型继承

  function Person(){

  }

  Person.prototype.name = "john";

  Person.prototype.age = 20;

  Person.prototype.sayHello = function(){

  console.log(this.name);

  }

  function Male(){

  }

  Male.prototype = new Person();//Male.prototype.__proto__ == Person.prototype 通过这行代码就实现继承

  //查找流程 male的__proto__(Male.prototype)上面有没有sayHello,

  //如果没有继续查找 male.__proto__.__proto__(Male.prototype.__proto__) 就是查找 Person.prototype

  var male = new Male();

  male.sayHello();

  3、组合继承

  function Person(name,age){

  this.name = name;

  this.age = age;

  }

  Person.prototype.sayHello = function(){

  console.log(this.name);

  }

  function Male(name,age){

  Person.call(this,name,age);//只能继承实例属性

  }

  //只考虑继承原型方法 是不是就可以了 让Male的原型对象也有Person原型对象上的方法

  /* Male.prototype = Person.prototype;

  //sayHi方法是我子类独有的方法

  Male.prototype.sayHi = function(){

  console.log("hi");

  }

  var male = new Male("john",20);

  male.sayHello();

  var person = new Person("aa",22);

  person.sayHi();//完了,父类居然能访问子类的方法,继承彻底乱了,原因是 Male.prototype 和 Person.prototype指向一样,任何一方改变,都会影响另一方 */

  for(let attr in Person.prototype){

  Male.prototype[attr] = Person.prototype[attr];

  }

  Male.prototype.sayHi = function(){

  console.log("hi");

  }

  var male = new Male("john",20);

  male.sayHello();

  male.sayHi();

  var person = new Person("aa",22);

  person.sayHi();

  4、ES6继承

  class Person{

  constructor(name,age){

  this.name = name;

  this.age = age;

  }

  sayHello(){

  console.log(this.name);

  }

  //扩展,定义类方法

  static foo(){

  console.log("这是类方法,不是实例方法");

  }

  }

  //通过extends这个关键字实现继承

  class Male extends Person{

  constructor(name,age){

  super(name,age);//1.创建this对象2.super指向父类的构造函数

  this.sexy = "男";//添加子类的实例属性

  }

  //在子类的原型方法里使用了父类的原型方法

  sayHi(){

  console.log("hi");

  super.sayHello();//super指向谁?指向父类的原型对象

  }

  static foo1(){

  super.foo(); //super指向父类

  }

  }

  var male = new Male("john",20);

  //male.sayHello();

  male.sayHi();

  Male.foo1();

  了解更多JS学习技巧,你可以关注“千锋郑州校区”微信公众号,定期发布技术文章和求职趋势分析。如果你想快速入行Web前端行业拿高薪,可以来千锋郑州Web前端培训班,专业大牛讲师以项目驱动教学过程和内容,让你理论与实战兼得,求职更具竞争力!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

大数据培训要花多少钱

2023-04-12

计算机前端怎么学

2023-04-12

大数据都需要学什么?难不难

2023-03-30

最新文章NEW

javaee是前端还是后端,都学什么

2023-03-24

it前端是做什么的

2023-03-24

大数据培训要多久?你了解多少

2023-03-09

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>