JS继承 笔记

JS继承 笔记

在JavaScript中,继承是实现面向对象编程的重要概念之一。JS继承可以让我们在保留原有对象特性的同时,扩展和重用其功能,让代码更加高效和灵活。

继承的基本概念

在Javascript中,所有对象都有原型(prototype)属性,该属性指向另一个对象。当我们访问对象的一个属性或方法时,如果当前对象没有这个属性或方法,那么它会去查找这个对象的原型对象,如果还没有找到,就会沿着原型链一直往上查找,直到找到为止。

继承方式

在JavaScript中,JS继承可以通过以下几种方式实现:

1. 原型链继承

原型链继承是JS中最常用的继承方式之一。该方式实现的核心就是利用Object.create()方法来创建一个新对象,让这个新对象的原型指向父亲对象。这样,新对象就能访问到父亲对象上的属性和方法了。

// 父类
function SuperClass() {
  this.name = 'human';
}

// 子类
function SubClass() {
  this.age = 20;
}

// 原型链继承
SubClass.prototype = new SuperClass();

var obj = new SubClass();
console.log(obj.age); // 20
console.log(obj.name); // human

2. 构造函数继承

构造函数继承是通过在子类的构造函数中调用父类的构造函数来实现继承的。由于子类是通过借用父类的构造函数来创建的,因此子类不能继承到父类原型上的方法。

// 父类
function SuperClass(name) {
  this.name = name;
  this.sayHello = function() {
    console.log('Hello ' + this.name);
  }
}

// 子类
function SubClass(name, age) {
  SuperClass.call(this, name);
  this.age = age;
}

var obj = new SubClass('John', 20);
console.log(obj.name); // John
console.log(obj.age); // 20
obj.sayHello(); // TypeError: obj.sayHello is not a function

3. 组合继承

组合继承是使用原型链和构造函数继承的混合继承方式,它的核心思想是通过借用构造函数来继承属性,通过将子类的原型设置为父类的实例来继承方法。这种方式实现了属性和方法的继承,但也存在一些问题:每次创建子类对象时都会调用一次父类的构造函数,导致一些不必要的开销。

// 父类
function SuperClass(name) {
  this.name = name;
}

SuperClass.prototype.sayHello = function() {
  console.log('Hello ' + this.name);
}

// 子类
function SubClass(name, age) {
  SuperClass.call(this, name);
  this.age = age;
}

SubClass.prototype = new SuperClass();
SubClass.prototype.constructor = SubClass;

var obj = new SubClass('John', 20);
console.log(obj.name); // John
console.log(obj.age); // 20
obj.sayHello(); // Hello John

示例介绍

示例1:原型链继承

// 父类
function Animal() {
  this.type = 'animal';
}

Animal.prototype.sayHello = function() {
  console.log('I am a ' + this.type);
}

// 子类
function Dog(name) {
  this.name = name;
}

// 原型链继承
Dog.prototype = new Animal();

var dog = new Dog('旺财');
dog.sayHello(); // I am a animal

在上面的代码中,创建了一个Animal类,其中定义了sayHello()方法;之后创建了Dog类,并将其原型设置为Animal类的实例,实现了在Dog类中继承Animal类中的sayHello()方法。最后,实例化Dog对象之后,就可以通过dog.sayHello()来访问到继承自Animal类中的sayHello()方法。

示例2:组合继承

// 父类
function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  console.log('Hello ' + this.name);
}

// 子类
function Student(name, grade) {
  Person.call(this, name);
  this.grade = grade;
}

Student.prototype = new Person();
Student.prototype.constructor = Student;

var stu = new Student('John', 3);
stu.sayHello(); // Hello John

在上面的代码中,创建了一个Person类,并在其中定义了sayHello()方法;之后创建了Student类,并在其构造函数中借用了Person类的构造函数来实现了属性的继承,同时将其原型设置为Person类的实例,实现了方法的继承。最后,实例化Student对象之后,就可以通过stu.sayHello()来访问到继承自Person类中的sayHello()方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS继承 笔记 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js中forEach,for in,for of循环的用法示例小结

    请看下面的文本。 js中forEach,for in,for of循环的用法示例小结 在JavaScript中,有多种迭代数组和对象的方式。 下面是三种常见的循环的用法: forEach,for in,和for of。接下来将详细介绍它们的用法和示例。 forEach循环 JavaScript中的forEach()方法用于迭代逐个数组元素,并为每个元素执行回…

    JavaScript 2023年5月28日
    00
  • JS获取当前时间的实例代码(昨天、今天、明天)

    获取当前时间是JavaScript中比较基础的内容,可以通过Date对象的方法获取到当前的时间、日期等信息。对于“昨天、今天、明天”的需求,可以在获取当前时间的基础上,通过一些计算方法实现。 以下是获取当前时间及计算“昨天、今天、明天”的示例代码: 获取当前时间的实例代码 const now = new Date(); // 创建一个Date对象,获取当前时…

    JavaScript 2023年5月27日
    00
  • javascript标准库(js的标准内置对象)总结

    下面是详细的攻略: JavaScript标准库 JavaScript标准库是一组常见的JavaScript内置对象和方法,这些对象和方法可用于在网页或应用程序中执行各种任务。下面是一些常见的JavaScript标准库: 1. String String对象是JavaScript中表示字符串的内置对象。String对象有很多有用的方法,例如indexOf(),…

    JavaScript 2023年5月18日
    00
  • JSP request.setAttribute()详解及实例

    我可以为您提供JSP request.setAttribute()的详细攻略。 什么是request.setAttribute()? 在JSP中,request.setAttribute()是一个用于在request对象中设置属性值的方法。它是通过request对象将数据从服务器端传递到客户端的一个常用方式。 通常,我们通过JSP页面和JavaBean之间的…

    JavaScript 2023年6月10日
    00
  • isArray()函数(JavaScript中对象类型判断的几种方法)

    下面是关于isArray()函数以及JavaScript中对象类型判断的几种方法的完整攻略。 1. isArray()函数 isArray()是JavaScript中的一个内置方法,用来判断一个对象是否是数组。它返回一个布尔值,为true表示对象是数组,为false表示对象不是数组。下面是isArray()函数的语法: Array.isArray(obj) …

    JavaScript 2023年6月10日
    00
  • java Signleton模式详解及示例代码

    当我们需要保证一个类在整个应用程序中只有一个实例时,可以采用单例模式。其中的“单例”意味着单个实例。在Java中,有多种方法可以实现单例模式,其中比较简单且常用的一种方法是使用“懒汉式”的单例模式。 什么是 Singleton 模式? Singleton 模式是设计模式的一种,它可以确保在整个应用程序中只有一个特定的实例。在Java中,Singleton模式…

    JavaScript 2023年5月28日
    00
  • js实现截取某个字符串前面的内容

    让我来详细讲解如何使用JavaScript实现截取某个字符串前面的内容。下面是具体步骤: 1. 使用indexOf()获取关键字的位置 在JavaScript中,我们可以使用indexOf()函数来获取字符串中某个关键字的位置,该函数会返回第一个匹配到的关键字的索引值,如果没有匹配到关键字则返回-1。我们可以利用这个函数来获取关键字在原字符串中的位置,从而确…

    JavaScript 2023年5月28日
    00
  • 详解Element-UI中上传的文件前端处理

    下面就是详解 “Element-UI中上传的文件前端处理” 的完整攻略。 一、前言 Element-UI 是饿了么前端团队开发并开源的一款基于 Vue.js 2.0 的 UI 组件库,拥有非常丰富的组件和样式,其中包含了上传文件的组件。然而,如果我们需要自定义上传文件前的处理流程,怎么做呢?本文将详细介绍 Element-UI 中上传文件前端处理的方法。 二…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部