JS继承 笔记

yizhihongxing

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日

相关文章

  • JavaScript的学习入门整理篇第1/3页

    以下是详细讲解“JavaScript的学习入门整理篇第1/3页”的完整攻略: 1. 确定学习目标 在学习JavaScript之前,我们首先需要明确自己的学习目标,比如想要学习JavaScript的基础语法,还是想要深入掌握JavaScript的高级特性。只有明确了学习目标,才能有针对性地学习。 2. 学习环境搭建 在进行JavaScript学习之前,我们需要…

    JavaScript 2023年5月27日
    00
  • JavaScript实现返回顶部按钮案例

    下面详细讲解一下“JavaScript实现返回顶部按钮案例”的完整攻略。 1. 添加HTML代码和CSS样式 首先在HTML文件中添加返回顶部按钮的HTML代码,例如: <a href="#" id="back-to-top" title="返回顶部"> <i class=&quo…

    JavaScript 2023年6月11日
    00
  • 详解javascript中的Error对象

    详解JavaScript中的Error对象 在JavaScript编程中,出错是常有的事情。为了更好地调试JavaScript代码,以及了解错误的类型和信息,JavaScript提供了Error对象来捕获和处理运行时的错误。 Error对象简介 Error对象是JavaScript的内置对象之一,它是个通用的错误对象,所有错误类型的实例都继承自该对象。 在J…

    JavaScript 2023年5月27日
    00
  • 利用H5api实现时钟的绘制(javascript)

    利用H5api实现时钟的绘制(javascript)可以分为以下几个步骤: 1. 创建canvas元素并获取上下文对象 首先需要在html页面中创建一个canvas元素,通过JavaScript获取该元素的上下文对象。 示例代码: <canvas id="clockCanvas"></canvas> const c…

    JavaScript 2023年6月10日
    00
  • RegExp 随笔 JavaScript RegExp 对象

    RegExp 随笔 JavaScript RegExp 对象 RegExp 对象在 JavaScript 中用于执行正则表达式的匹配。本文将为您介绍 RegExp 对象的使用、创建、使用方法和属性等内容。 RegExp 对象的创建 由于正则表达式是用特殊的语法来描述字符串模式的,因此我们需要先定义一个字符串作为正则表达式的模式描述,然后使用 RegExp 对…

    JavaScript 2023年5月28日
    00
  • 用Flutter做桌上弹球(绘图(Canvas&CustomPaint)API)

    使用Flutter开发桌上弹球游戏可以使用Flutter自带的绘图(Canvas&CustomPaint)API,以下是实现过程的完整攻略。 步骤1:创建Flutter项目 首先,在电脑上安装Flutter开发环境,并通过Flutter命令行工具创建新项目。 flutter create tabletop_pinball_game 在创建完毕后,进入…

    JavaScript 2023年6月11日
    00
  • js中怎么判断两个字符串相等的实例

    判断两个字符串是否相等是编程中经常涉及到的问题,JavaScript中也提供了多种方法来实现字符串的比较。下面是两个示例来说明如何使用JavaScript判断两个字符串相等。 示例一:使用===比较运算符 使用===比较运算符可以判断两个字符串是否完全相等,包括字符串的值和类型。如果两个字符串完全相等,则返回true,否则返回false。 const str…

    JavaScript 2023年5月28日
    00
  • JavaScript 数据结构之集合创建(2)

    让我们来详细讲解一下“JavaScript 数据结构之集合创建(2)”的完整攻略。 一、什么是集合? 集合是一种数据结构,用于存储一组不重复的元素。集合可以使用数组或对象实现,但是使用数组的方式会占用更多内存,因为数组需要存储每个元素的值和索引。 二、如何创建集合? 在JavaScript中,可以使用对象表示集合。每个键(key)都是集合中的一个元素,并且每…

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