15分钟深入了解JS继承分类、原理与用法

下面是关于“15分钟深入了解JS继承分类、原理与用法”的完整攻略。

一、JS继承分类

JS继承可以分为以下几种类型:

  1. 原型链继承
  2. 借用构造函数继承
  3. 组合继承
  4. 原型式继承
  5. 寄生式继承
  6. 寄生组合式继承

二、JS继承原理

JS中的继承是基于原型的,每个对象都有__proto__属性,该属性指向对象的原型对象,原型对象又有__proto__属性,依次形成了一个原型链。当我们访问一个对象的属性时,如果该对象本身没有该属性,就会沿着原型链往上查找,直到找到该属性或者到达原型链的末尾为止。

三、JS继承用法

1. 原型链继承

原型链继承就是将父类的实例作为子类的原型,子类可以通过原型链继承到父类的属性和方法。

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

function Child() {}

Child.prototype = new Parent(); 

// test
var child = new Child();
child.sayHello(); // Hello parent

2. 借用构造函数继承

借用构造函数继承就是子类使用父类的构造函数来构造自己的对象,相当于复制父类的属性和方法,实现了对父类属性的继承。但是父类原型中的方法和属性是无法继承的。

function Parent() {
  this.names = ['parent1', 'parent2'];
}

function Child() {
  Parent.call(this);
}

// test
var child1 = new Child();
child1.names.push('child1');
console.log(child1.names); // ["parent1", "parent2", "child1"]

var child2 = new Child();
console.log(child2.names); // ["parent1", "parent2"]

3. 组合继承

组合继承是将原型链继承和借用构造函数继承结合起来。通过原型链来实现对父类原型中方法和属性的继承,通过借用构造函数来实现对父类实例属性的继承。

function Parent() {
  this.name = 'parent';
  this.names = ['parent1', 'parent2'];
}

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

function Child() {
  Parent.call(this);
  this.age = 18;
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

// test
var child = new Child();
child.names.push('child');
console.log(child.names); // ["parent1", "parent2", "child"]

child.sayHello(); // Hello parent

4. 原型式继承

原型式继承是通过原型对象来实现继承,它的本质是对一个对象的封装,返回一个可以继承该对象属性和方法的新对象。

var parent = {
  name: 'parent',
  sayHello: function() {
    console.log('Hello ' + this.name);
  }
};

var child = Object.create(parent);
child.name = 'child';

// test
child.sayHello(); // Hello child

5. 寄生式继承

寄生式继承是在原型式继承的基础上添加一些方法和属性,返回一个继承了原对象的扩展对象。

var parent = {
  name: 'parent',
  sayHello: function() {
    console.log('Hello ' + this.name);
  }
};

function createChild(obj) {
  var child = Object.create(obj);

  child.sayHi = function() {
    console.log('Hi ' + this.name)
  }

  return child;
}

var child = createChild(parent);
child.name = 'child';

// test
child.sayHi();  // Hi child
child.sayHello(); // Hello child

6. 寄生组合式继承

寄生组合继承是将组合继承中的一个缺点——继承原型对象时调用了一次父类构造函数——通过寄生继承方式解决。

function Parent() {
  this.name = 'parent';
}

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

function Child() {
  Parent.call(this);
  this.age = 18;
}

function createObject(obj) {
  function F() {}
  F.prototype = obj;
  return new F();
}

Child.prototype = createObject(Parent.prototype);
Child.prototype.constructor = Child;

// test
var child = new Child();
console.log(child.name); // parent
console.log(child.age); // 18

child.sayHello(); // Hello parent

以上就是关于“15分钟深入了解JS继承分类、原理与用法”的完整攻略,希望能对你有所帮助。

阅读剩余 73%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:15分钟深入了解JS继承分类、原理与用法 - Python技术站

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

相关文章

  • 使用vue-router为每个路由配置各自的title

    针对如何使用vue-router为每个路由配置各自的title,可以按照以下完整攻略进行操作: 1.在路由中设置meta属性 首先在路由中设置meta属性,可以定义一个meta属性,用于存储每个路由的标题,具体代码如下: const routes = [ { path: ‘/’, name: ‘home’, component: Home, meta: { …

    JavaScript 2023年6月11日
    00
  • json字符串之间的相互转换示例代码

    下面是讲解“JSON字符串之间的相互转换示例代码”的完整攻略,包含两条示例说明。 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON格式采用键值对的方式来表示数据,方便数据的存储和传输。 如何将JSON字符串转换为JavaScript对象? 可以使用 JSON.parse() 方法将JSON…

    JavaScript 2023年5月27日
    00
  • JS数组搜索之折半搜索实现方法分析

    JS数组搜索之折半搜索实现方法分析 什么是折半搜索 折半搜索,也称二分搜索,是一种高效的搜索算法,它可以在一个已经按照某种顺序排好序的数组中查找某个值的位置。折半搜索每次对数组进行“折半”,判断目标值在左半部分还是右半部分,然后重复这个过程,直到找到目标值或者确定目标值不存在于数组中。 如何实现折半搜索 在JavaScript中,可以通过以下代码实现一个折半…

    JavaScript 2023年5月28日
    00
  • 如何利用PHP 快速解决跨域问题

    下面是如何利用PHP快速解决跨域问题的完整攻略: 什么是跨域问题 首先,我们需要了解一下什么是跨域问题。当客户端使用js等脚本语言向另一个域名或IP地址发起请求时,如果目标域名与客户端当前域名不同,就会遇到跨域问题。出于安全的考虑,浏览器限制了这种跨域请求,导致请求失败。 解决跨域问题的方法 解决跨域问题的方法有很多,其中比较常用的有jsonp、cors和p…

    JavaScript 2023年6月11日
    00
  • 基于javascript的无缝滚动动画实现2

    针对”基于javascript的无缝滚动动画实现2″,我来给您详细讲解一下。 简介 无缝滚动动画是Web开发中较为常见的功能,通常用于实现图片、文字等大块内容的滚动展示。本攻略将介绍使用JavaScript实现无缝滚动动画的方法。 实现过程 本攻略实现的无缝滚动动画需要以下主要步骤: 创建HTML布局:需要创建一个固定大小的div容器,再将需要滚动展示的内容…

    JavaScript 2023年6月10日
    00
  • javascript动画之磁性吸附效果篇

    对于“javascript动画之磁性吸附效果篇”的完整攻略,我将从以下几个方面进行讲解: 磁性吸附效果的概述 实现方法 示例说明 注意事项 1. 磁性吸附效果的概述 磁性吸附效果是常用于网页设计的动画效果之一,它可以使鼠标在网页上的元素上移动时,元素就像被一个磁铁吸附一样,会跟随鼠标的移动而移动。 2. 实现方法 磁性吸附效果的实现方法有多种,这里介绍一种基…

    JavaScript 2023年6月10日
    00
  • 详解ionic本地相册、拍照、裁剪、上传(单图完全版)

    详解Ionic本地相册、拍照、裁剪、上传(单图完全版) 本文将详细介绍如何在Ionic项目中实现本地相册、拍照、裁剪、上传的功能,主要介绍以下步骤: 安装插件 导入插件 修改config.xml文件 实现功能的代码 编译打包 安装插件 我们需要安装以下插件: cordova plugin add cordova-plugin-camera cordova p…

    JavaScript 2023年6月11日
    00
  • 高效利用Angular中内置服务$http、$location等

    让我来详细讲解一下“高效利用Angular中内置服务$http、$location等”的攻略。 $http服务 在AngularJS中,$http是一个内置服务,用于在Angular应用程序中发起HTTP请求。该服务使用 AJAX 核心技术来完成HTTP请求,并支持 GET、POST、PUT等请求方法。使用$http服务可以很方便地向Web服务器发起请求,获…

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