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日

相关文章

  • AJAX使用get与post模式的区别分析

    AJAX是一种前端技术,可以在不刷新整个页面的情况下向服务器发送和接收数据,从而实现异步交互。而在与服务器通信时,有两种常见的方式:使用GET和POST。 GET和POST的区别 1.数据传递方式 GET是通过URL传递参数,以问号“?”连接URL和参数,多个参数之间使用“&”分隔。 POST是通过http body传递参数,参数不会暴露在URL上。…

    JavaScript 2023年6月11日
    00
  • 这段js代码得节约你多少时间

    这段JS代码节约了很多处理数组的时间。具体是通过使用Array.reduce()方法来将数组中的元素合并成一个值,从而避免了使用循环操作数组的需要,大大提高了代码效率。 下面是完整的攻略: 1. 理解 Array.reduce() 方法 Array.reduce() 方法是 JavaScript 数组常用的高阶函数之一,它对数组中的所有元素进行迭代,并将它们…

    JavaScript 2023年5月27日
    00
  • js表单事件详细汇总

    关于“js表单事件详细汇总”的完整攻略,我将分为五部分进行讲解。 第一部分:什么是表单事件 表单事件是在用户与表单交互时触发的JavaScript方法。表单事件绑定在表单元素上,例如input、button、form等。 第二部分:表单事件的使用方法 表单事件可以通过addEventListener()或on事件属性来绑定。addEventListener(…

    JavaScript 2023年6月10日
    00
  • 前端页面禁止别人调试的方法

    前端页面禁止别人调试的方法并非绝对可行,但可以一定程度上增加安全性和难度。以下是几种常见的方法: 1. 关键代码混淆 使用 JavaScript 的混淆工具可以将代码转换为难以理解和修改的形式。可以在构建前的自动化任务中使用工具,例如 UglifyJS。 示例代码: function hi() { var a = "hello "; va…

    JavaScript 2023年6月11日
    00
  • 使用JavaScript 实现各种跨域的方法

    使用JavaScript实现跨域的方法通常分为以下几种: 1. JSONP JSONP(JSON with Padding)是在跨域访问时比较流行的一种方式,它不是通过XHR请求数据,而是利用 <script> 标签可以访问不同域名下的资源的特性来实现。 实现原理 在A域下使用script标签请求B域下的数据: <script src=&q…

    JavaScript 2023年5月27日
    00
  • JavaScript事件学习小结(二)js事件处理程序

    以下是“JavaScript事件学习小结(二)js事件处理程序”攻略的详细讲解: 简介 JavaScript中事件处理程序是指在用户与网页交互时由浏览器调用的函数。事件处理程序通常用来响应用户的点击、鼠标移动、键盘输入等行为。 事件处理程序的三种方式 JavaScript中有三种方式定义事件处理程序: 直接在HTML标签中使用内联事件处理程序; 在JS脚本中…

    JavaScript 2023年5月18日
    00
  • Javascript入门学习第三篇 js运算

    Javascript入门学习第三篇 js运算 在Javascript中,我们可以使用运算符来进行一系列的数学和逻辑运算。运算符可以对不同类型的值(例如数字、字符串、布尔值等)执行不同的操作。本篇教程将介绍Javascript中的各种运算符及其用法。 算术运算符 Javascript中的算术运算符用于执行基本的数学运算。常用的算术运算符包括:加号(+), 减号…

    JavaScript 2023年5月17日
    00
  • JS操作Cookies包括(读取添加与删除)

    JS操作Cookies是指在网页上使用JavaScript语言来读取、添加和删除HTTP Cookies的过程。常见的应用场景包括存储用户会话信息、记录用户偏好和跟踪用户行为等。下面是JS操作Cookies的完整攻略。 1. 读取Cookies 读取Cookies的方式是通过document.cookie属性来读取当前域名下的所有Cookies。docume…

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