JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现

yizhihongxing

JavaScript高级程序设计 阅读笔记(十四)讲解了JavaScript中的继承机制以及其实现方式。下面是我总结的一个完整攻略:

继承机制的本质

JavaScript采用原型(prototype)继承机制。当访问一个对象的属性时,JavaScript引擎会首先查找该对象自身是否有这个属性。如果存在,则直接返回该属性值;如果不存在,则继续查找该对象的原型对象(即__proto__属性指向的对象)是否有该属性。如果原型对象中不存在该属性,则继续查找其原型对象的原型对象,直到达到原型链的顶端为止。

因此,通过将属性或方法定义在原型对象中,可以让子对象共享这些属性或方法。而通过在子类的构造函数中调用父类的构造函数,可以实现继承父类的实例属性。

继承的实现方式

JavaScript实现继承的方式有很多,以下是其中几种:

类式继承

通过定义一个父类(通常称为超类或基类)的构造函数,再定义一个子类(通常称为派生类或子类)的构造函数,使子类的原型对象指向父类的实例,从而实现继承。

// 定义父类
function SuperClass() {
    this.superValue = true;
}

// 父类原型中定义方法
SuperClass.prototype.getSuperValue = function() {
    return this.superValue;
}

// 定义子类
function SubClass() {
    this.subValue = false;
}

// 将子类的原型对象指向父类的实例
SubClass.prototype = new SuperClass();

// 子类原型中定义方法
SubClass.prototype.getSubValue = function() {
    return this.subValue;
}

// 创建子类实例
var subObj = new SubClass();
console.log(subObj.getSuperValue()); // true
console.log(subObj.getSubValue()); // false

构造函数继承

通过在子类的构造函数中调用父类的构造函数,实现继承父类的实例属性。

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

// 定义子类
function SubClass(name, age) {
    // 调用父类的构造函数,继承父类的实例属性
    SuperClass.call(this, name);
    this.age = age;
}

// 创建子类实例
var subObj = new SubClass('Alice', 18);
console.log(subObj.name); // 'Alice'
console.log(subObj.age); // 18

组合继承

通过将类式继承和构造函数继承结合起来,既继承了父类的实例属性,又继承了父类原型中的属性和方法。

// 定义父类
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.sayAge = function() {
    console.log('I am ' + this.age + ' years old');
}

// 创建子类实例
var subObj = new SubClass('Alice', 18);
subObj.sayHello(); // 'Hello, Alice'
subObj.sayAge(); // 'I am 18 years old'

以上是三种常见的继承实现方式,它们各有优缺点,在实际应用中应该根据具体情况选择合适的继承方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现 - Python技术站

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

相关文章

  • Javascript中Eval函数的使用

    当我们需要将某个字符串当做JavaScript代码来执行时,Eval函数就可以派上用场了。Eval函数的学习对于理解和书写高级JavaScript代码具有一定的帮助。 什么是 Eval 函数 Eval函数是JavaScript内置的一个全局函数,可以将指定的字符串解析为JavaScript代码并执行。通常我们会把一段需要执行的JavaScript代码以字符串…

    JavaScript 2023年5月28日
    00
  • JS查找数组中重复元素的方法详解

    JS查找数组中重复元素的方法详解 在 JavaScript 中,有多种方式可以查找一个数组中的重复元素。下面将介绍几种常见的方法。 方法一:使用双重循环 这是最基本的方法之一,它的时间复杂度是 O(n^2)。具体的实现方法如下: const arr = [1, 2, 3, 4, 5, 6, 7, 7, 8, 9]; for (let i = 0; i &lt…

    JavaScript 2023年5月27日
    00
  • JavaScript获取当前时间向前推三个月的方法示例

    获取当前时间向前推三个月可以使用JavaScript中的Date对象和相关方法来实现。下面是具体的攻略: 获取当前时间 使用JavaScript中的Date对象可以获取当前的时间。代码如下: var currentTime = new Date(); console.log(currentTime); 输出结果如下: Sun Jul 11 2021 15:4…

    JavaScript 2023年5月27日
    00
  • uniapp使用navigateBack方法返回上级页面并刷新的简单示例

    下面我将详细讲解“uniapp使用navigateBack方法返回上级页面并刷新的简单示例”的完整攻略。 1. navigateBack方法是什么? navigateBack是uniapp中的导航API之一,用来返回上一页。当你在一个页面中进行跳转到另外一个页面时,可以使用navigateTo方法来进行跳转,然后在跳转后的页面中通过navigateBack方…

    JavaScript 2023年6月11日
    00
  • Javascript在IE和Firefox浏览器常见兼容性问题总结

    Javascript在IE和Firefox浏览器常见兼容性问题总结 介绍 Javascript是一种用于Web前端开发的脚本语言,但是由于浏览器的不同实现,可能会导致在不同浏览器中出现不同的行为。本文总结了Javascript在IE和Firefox浏览器中常见的兼容性问题,并提供了解决方案。 常见问题及解决方案 1. document.all 在IE浏览器中…

    JavaScript 2023年6月10日
    00
  • 如何让每个Http请求都自动带上token

    要让每个HTTP请求都自动携带token,我们可以使用拦截器来实现。拦截器是一个可以在请求和响应之间进行干预的组件,我们可以在它的回调方法中加入我们需要的逻辑,比如带上token。下面是一个完整的攻略: 步骤一:添加拦截器 首先,我们要添加一个拦截器,代码如下: public class TokenInterceptor implements Interce…

    JavaScript 2023年6月11日
    00
  • JS实现字符串中去除指定子字符串方法分析

    下面是对“JS实现字符串中去除指定子字符串方法”的解析和攻略: 什么是JS实现字符串中去除指定子字符串方法? JS实现字符串去除指定子字符串的方法是指通过JS代码编写,去掉字符串中特定的子字符串的方法。这种方法通常使用常规的JS字符串操作函数(如replace()等)来实现。 JS实现字符串中去除指定子字符串方法的解决方案 常见的JS实现字符串中去除指定子字…

    JavaScript 2023年5月28日
    00
  • JavaScript 设计模式学习 Singleton

    对于“JavaScript 设计模式学习 Singleton”的完整攻略,可以分为以下步骤: 1. 了解 Singleton 模式的定义与原理 Singleton 模式是一种创建型设计模式,它确保某个类只有一个实例,并提供一个全局访问点。 Singleton 模式主要包含三个要素:私有化构造函数、私有化静态属性和一个提供全局访问的静态方法。 在 JavaSc…

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