美文网首页
JS继承与类

JS继承与类

作者: 郑馋师 | 来源:发表于2019-12-14 01:16 被阅读0次

继承

概念

通过【某种方式】让一个对象可以访问到另一个对象中的属性和方法,我们把这种方式称之为继承 并不是所谓的xxx extends yyy

原因

有些对象会有方法(动作、行为),而这些方法都是函数,如果把这些方法和函数都放在构造函数中声明就会导致内存的浪费

继承方式

<meta charset="utf-8">

参考:构造函数的继承http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

非构造函数的继承http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html

JS 构造对象目前有两种方式,一种是用构造函数+prototype,一种是用 class

  1. 两者方式 JS 都支持,JS 是一门包容的语言,提供了多种表达形式,两者方式都能表达程序员的思想。
  2. 构造函数+prototype 是先提供的,class 是后提供的,说明 构造函数+prototype 是 JS 一开始的基因,而 class 的粉丝其实更喜欢 class,所以两种都有必要学习,class多是java的思想

原型链继承

利用原型让一个引用类型继承另一个引用类型的属性和方法
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
其实只要知道一个就好,只要一直记住他的原型是谁就好了

prototype 属性

  • 所有函数一出生就有一个 prototype 属性
  • 所有 prototype 一出生就有一个 constructor 属性
  • 所有 constructor 属性一出生就保存了对应的函数的地址
  • 如果一个函数不是构造函数,它依然拥有 prototype 属性,只不过这个属性暂时没什么用

eg

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHi = function() {
  console.log("你好,我叫" + this.name);
};
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」

let person2 = new Person("jack", 19);
person2.name === "jack"; // true
person2.age === 19; // true
person2.sayHi(); // 打印出「你好,我叫 jack」

class继承

class是es6新出的功能,与prototype那个语法功能相同

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHi() {
    console.log("你好,我叫" + this.name);
  }
}
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」

let person2 = new Person("jack", 19);
person2.name === "jack"; // true
person2.age === 19; // true
person2.sayHi(); // 打印出「你好,我叫 jack」

相关文章

  • JS类与继承

    一些概念 prototype是构造函数的指针,指向原型对象。讲述的是构造函数和原型对象之间的关系。__proto_...

  • JS继承与类

    继承 概念 通过【某种方式】让一个对象可以访问到另一个对象中的属性和方法,我们把这种方式称之为继承 并不是所谓的x...

  • #js继承

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 类式继承是...

  • JS里的继承

    什么是继承继承的原理如何完成JS的继承? 什么是继承 继承就是子类拥有父类的各种属性和方法那什么是类?这里的JS的...

  • JS继承

    JS中的继承 许多OO语言都支持两种继承方式:接口继承和实现继承; 因为JS中没有类和接口的概念 , 所以JS不支...

  • js继承遇到的小问题

    这两天在看js继承方面,它不像OC那种传统的类继承。js继承方式还是挺多的。比如:原型继承、原型冒充、复制继承 原...

  • js面向对象实现面向对象(二)

    上一篇讲到js实现对类对封装,本篇介绍类的继承,多态。 类的继承 类式继承 类式继承方式是将父类的实例赋在子类的原...

  • JavaScript 10

    js继承的概念 1.通过原型链方式实现继承(对象间的继承) 2.类式继承(构造函数间的继承) 由于js不像Java...

  • JS对象和继承

    JS对象和继承 JS是个无类的语言,因此对于对象构造器(类)和对象的继承就值得我们研究了。本文讲述JS中构造器的表...

  • 请使用Js代码写出一个类继承的模型

    // 请使用Js代码写出一个类继承的模型// 请使用Js代码写出一个类继承的模型,需包含以下实现:// 定...

网友评论

      本文标题:JS继承与类

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