js中继承的几种用法总结(apply,call,prototype)

JS中继承的几种用法总结(apply, call, prototype)

在JavaScript中,继承是一种通过一个对象获取另一个对象属性和方法的方式。在JavaScript的原始版本中,没有标准的面向对象编程方式,但是通过使用JavaScript中的一些基本原则和技巧,我们可以轻松地实现继承。

在JavaScript中,我们可以使用apply,call以及原型链继承方式来实现对象的继承。接下来我们将对这些继承方式进行详细介绍。

  1. apply与call的继承方式

apply和call是两种JS中调用函数的方式,它们可以改变函数执行时的上下文环境。其中,apply方法可以给一个对象的属性或方法赋值,使用方法是:apply(thisObj, args)。

下面是apply方法继承的代码示例:

function Person(name) {
  this.name = name;
}

function Student(name, age) {
  Person.apply(this, [name]);
  this.age = age;
}

var s = new Student("张三", 18);
console.log(s.name); //输出张三
console.log(s.age); //输出18

这里,Student继承了Person的属性和方法,通过调用Student函数的apply方法,将Person对象的属性和方法复制给Student对象。

同样,有一个call方法,使用方法是:call(thisObj, arg1, arg2, ...),它也可以实现继承。

function Person(name) {
  this.name = name;
}

function Student(name, age) {
  Person.call(this, name);
  this.age = age;
}

var s = new Student("张三", 18);
console.log(s.name); //输出张三
console.log(s.age); //输出18

相比于apply,call的使用方法略有不同,更适合参数刚好相符的情况。

  1. 原型链继承

原型链继承是指在子类中通过prototype对象引用父类的prototype属性,从而实现继承。

function Person(name) {
  Person.prototype.name = name;
}

function Student(age) {
  this.age = age;
}

Student.prototype = new Person("张三");

var s = new Student(18);
console.log(s.name); //输出张三
console.log(s.age); //输出18

这里,子类Student通过prototype对象继承了父类Person的属性和方法,从而实现了继承。

总结:

在JavaScript中,我们可以通过使用apply,call和原型链方式来实现对象的继承。其中,apply和call的使用方法相对较为简单,但是只能继承属性,而无法继承方法。原型链继承方式复杂一些,但可以同时继承属性和方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中继承的几种用法总结(apply,call,prototype) - Python技术站

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

相关文章

  • JavaScript实现简单的文本逐字打印效果示例

    让我来讲解一下“JavaScript实现简单的文本逐字打印效果示例”的完整攻略。 1. 思路分析 要实现文本逐字打印效果,我们首先要思考实现的思路。一种可行的思路如下: 定义一个文本框用于展示要逐字打印的文字内容。 定义一个数组,将要逐字打印的文字内容存入这个数组中。 定义一个计数器,记录已经打印的字数。 定义一个定时器,每隔一段时间(如100毫秒)输出一个…

    JavaScript 2023年5月28日
    00
  • window.location.href中url中数据量太大时的解决方法

    当使用JavaScript中的window.location.href属性在URL中传递大量数据时,可能会超出浏览器限制的URL长度限制。这可能导致数据丢失或URL截断,无法完全传递所需的数据。为解决这个问题,我们可以考虑以下两种方法: 方法一:使用POST请求 将数据通过POST请求发送给服务器,而不是将其作为URL参数附加到网址中。这样可以避免浏览器UR…

    JavaScript 2023年6月10日
    00
  • javascript 设计模式之组合模式原理与应用详解

    JavaScript设计模式之组合模式原理与应用详解 什么是组合模式 组合模式是一种结构型设计模式,它将对象组合成树形结构来表示“整体-部分”层次结构,让客户端能够统一地处理单个对象和对象组合。 组合模式对单个对象和组合对象的访问具有一致性,它定义了一个抽象类或接口以表示所有可被组合的对象的共同方法和属性,这个抽象类或接口可以为叶子节点和组合节点提供一个统一…

    JavaScript 2023年5月28日
    00
  • 详解JS数组方法

    详解JavaScript数组方法 概述 JavaScript中数组(Array)是一种非常常用的数据结构,它们通常用于存储一系列的值。在JavaScript中,数组具有以下特点: 数组是一种有序的集合,每个元素都有一个索引。 数组的长度是可变的,可以随时添加或删除元素。 数组可以存储不同类型的值,例如数字、字符串、对象等。 JavaScript数组中常用的方…

    JavaScript 2023年5月18日
    00
  • 定时器(setTimeout/setInterval)调用带参函数失效解决方法

    当我们在使用JavaScript中的定时器(setTimeout/setInterval)调用带参的函数时,有时候就会遇到传递参数失败或丢失的问题。本篇攻略将会详细介绍这个问题的解决方法。 问题描述 在使用定时器调用带参函数时,经常会遇到该函数中的参数传递失败的情况。比如,下面的代码: setTimeout(myFunc(param1), 1000); 在1…

    JavaScript 2023年6月11日
    00
  • JS函数进阶之prototy用法实例分析

    下面我详细讲解一下 “JS函数进阶之prototype用法实例分析” 的完整攻略。 1. 什么是JS中的prototype 在JavaScript中,每个函数都有一个prototype属性,它是函数构造器的原型对象,也是通过构造器创建的对象的原型。这个原型对象是一个普通对象,其中包含一些方法和属性,它们可以被构造器所创建的所有实例对象所共享。 2. prot…

    JavaScript 2023年5月28日
    00
  • 原生js实现无限循环轮播图效果

    原生JS实现无限循环轮播图的步骤如下: 定义样式和HTML结构 先定义轮播图的样式和HTML结构,可以用一个ul包含多个li标签,每个li标签里放置一张图片。 <div> <ul class="slider"> <li><img src="image1.jpg" alt=&qu…

    JavaScript 2023年6月11日
    00
  • javaScript array(数组)使用字符串作为数组下标的方法

    使用字符串作为数组下标的方法在Javascript中称为关联数组。下面是实现关联数组的步骤以及示例说明。 1. 声明一个空数组 首先,我们需要声明一个空数组作为基础。 let myArray = []; 2. 使用字符串下标存储值 接下来,我们可以使用字符串作为数组的下标存储值。 myArray["name"] = "Lucy&…

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