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中的进程和线程详解

    JS中的进程和线程详解 前言 JavaScript是一种单线程脚本语言,这就决定了它只能同时做一件事情。但是在一些新的开发需求和场景下,我们需要在JavaScript中模拟多线程。 进程和线程 在JS中,进程是指浏览器进程,线程就是指浏览器内部的线程。每一个页面都可以看做是一个独立的进程,同时在页面中可以创建多个线程来提高性能。 Web Worker Web…

    JavaScript 2023年5月27日
    00
  • Js实现Base64编码与解码

    Js实现Base64编码与解码的完整攻略如下: Base64编码与解码 Base64是一种用64种字符来表示二进制数据的编码方式。它常用于在URL、Cookie、网页传输等场合下,将原始数据转换为纯文本的形式来进行传输或存储。在JavaScript中,可以通过自带的atob和btoa函数来实现Base64的编解码。 Base64编码 在JavaScript中…

    JavaScript 2023年5月19日
    00
  • 解析javascript中鼠标滚轮事件

    下面是解析 JavaScript 中的鼠标滚轮事件的完整攻略: 什么是鼠标滚轮事件? 鼠标滚轮事件(mousewheel 事件)指的是当用户通过鼠标滚轮滚动时触发的事件。在 JavaScript 中,我们可以使用 mousewheel 事件来监听用户的鼠标滚轮操作。 如何监听鼠标滚轮事件? 在 JavaScript 中,可以通过以下两种方式来监听鼠标滚轮事件…

    JavaScript 2023年6月11日
    00
  • 解决微信内置浏览器返回上一页强制刷新问题方法

    解决微信内置浏览器返回上一页强制刷新问题方法 问题描述 在微信内置浏览器中,当用户点击返回上一页时,页面会被强制刷新,导致页面中的一些数据丢失或者重新加载,影响用户体验。 引起问题的原因 在微信内置浏览器中,当页面的url发生变化时,微信浏览器会强制刷新页面。这种情况下,页面中所有的数据都会被重新加载,导致我们在实现页面交互时的一些问题。 解决方案 方案一:…

    JavaScript 2023年6月11日
    00
  • ajax请求get与post的区别总结

    针对“ajax请求get与post的区别总结”,建议分以下几个部分详细讲解: 一、什么是Ajax? Ajax(Asynchronous JavaScript And XML)指的是一种用于在Web页中实现异步请求的技术,在不刷新整个页面的情况下对页面的局部进行更新。简单来说,使用Ajax可以让前端通过异步的方式与后端进行交互和数据传输。 二、get和post…

    JavaScript 2023年6月11日
    00
  • 详解Vue-Router源码分析路由实现原理

    详解Vue-Router源码分析路由实现原理 前言 随着前端开发的不断发展,大型应用程序的前端实现也变得越来越复杂。前端路由就是其中非常重要的一部分,它可以帮助开发者构建起一个功能完善的单页面应用程序。而Vue-Router则是目前Vue.js框架中非常流行的前端路由方案。本文将详细讲解Vue-Router源码分析,帮助开发者更好地理解Vue-Router的…

    JavaScript 2023年6月11日
    00
  • 浅谈Javascript编程风格

    浅谈Javascript编程风格 Javascript编程风格对于代码的可读性和可维护性具有至关重要的影响。本篇文章将介绍一些遵循良好Javascript编程规范的方法和技巧,以及如何避免一些常见的问题。 变量与常量 Javascript中的变量和常量都是松散类型,但是我们建议使用let和const来定义变量和常量。同时,尽可能避免使用全局变量和常量,并根据…

    JavaScript 2023年5月18日
    00
  • JavaScript实现按键精灵的原理分析

    JavaScript实现按键精灵的原理分析 按键精灵是一种自动化测试工具,可以通过记录和回放用户在网页上的操作,以缩短测试时间和提高测试效率。JavaScript可以实现按键精灵的功能,下面是具体的攻略。 一、原理分析 按键精灵的功能实现主要需要以下三个步骤: 记录用户的操作。当用户在网页上进行操作时,通过JavaScript代码记录下来,包括点击、输入和滚…

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