首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript继承:调用超级构造函数还是使用原型链?

在JavaScript中,实现继承可以使用两种方式:调用超级构造函数(构造函数继承)或使用原型链(原型继承)。

  1. 调用超级构造函数(构造函数继承):
    • 概念:通过在子类构造函数中调用父类构造函数来继承父类的属性和方法。
    • 分类:属于经典的面向对象编程中的类继承方式。
    • 优势:可以继承父类的实例属性和方法,并且可以在子类构造函数中传递参数给父类构造函数。
    • 应用场景:适用于需要在子类中拥有独立的实例属性,并且需要在子类构造函数中执行一些初始化操作的情况。
    • 推荐的腾讯云相关产品:无
  2. 使用原型链(原型继承):
    • 概念:通过将子类的原型对象指向父类的实例来继承父类的属性和方法。
    • 分类:属于JavaScript中的原型继承方式。
    • 优势:可以继承父类的原型属性和方法,实现方法的复用。
    • 应用场景:适用于需要在子类中共享父类原型上的属性和方法,并且不需要在子类构造函数中执行额外的初始化操作的情况。
    • 推荐的腾讯云相关产品:无

综上所述,选择调用超级构造函数还是使用原型链取决于具体的需求。如果需要在子类中拥有独立的实例属性和执行初始化操作,可以选择调用超级构造函数;如果需要在子类中共享父类原型上的属性和方法,并且不需要执行额外的初始化操作,可以选择使用原型链。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript原型继承与盗用构造函数继承

---- theme: channing-cyan 这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战 昨天我们讲解了原型原型,今天我们说一下继承,顺便再重温一下原型 什么是继承 继承这个词比较容易理解...这个就是继承。我们直接上干货。 原型继承 原型继承是js中的主要继承方式,它的基本思想就是通过原型继承多个引用类型的属性和方法。...对于属性和方法一直会持续到原型末端 原型虽然是比较强大的继承实现工具,但是它里面所有的引用值都是实例间共享的,而且子类不能向父类传参,一般原型也不会被单独使用,我们可以通过盗用构造函数配合来解决这些问题...盗用构造函数 盗用构造函数有时候也被一些人叫做“对象伪装”或“经典继承”。这个思路很简单,在字类构造函数调用父类构造函数。我们可以用.call()和.apply()将父类构造函数引入子类函数。...盗用构造函数也有一定的问题 1、只能继承父类构造函数的属性。 2、无法实现构造函数的复用。(每次用每次都要重新调用) 3、每个新实例都有父类构造函数的副本,臃肿。

40120

【JS精粹】原型继承构造函数继承的 “毛病”

如果你用 JavaScript 面向对象的能力来编程的话,能想到的,也只供使用的就是:基于原型。...原型中的函数和对象》 这里还是用代码展示下它们的指向关系吧: 上面例子中有 1 个对象 instance , 两个函数,SuperType 和 SubType 。函数是上帝,对象是基本物质。...构造函数继承 构造函数继承,也叫做:“盗用构造函数”,“对象伪装”或“经典继承”。 基本思路:在子类构造函数中用 apply()和 call()方法调用父类构造函数。...,但是它也有它的问题,也是使用构造函数模式自定义类型的问题, 即:必须在构造函数中定义方法(在原型上定义方法,子类是访问不到的),函数不能重用。...思路是:使用原型继承原型上的属性和方法,而通过构造函数继承实例属性。

1.2K20

深入理解javascript中的继承机制(4)多继承寄生式继承借用构造函数借用构造函数并且复制原型以上

javascript而言,要实现多继承是比较简单的,因为javascript函数可以接受任意个数目的参数,这就使问题变得简单了。...首先将已有的对象作为新对象的原型继承它的属性,我们调用了之前的objec函数 然后再给他添加其他属性与方法 借用构造函数 这种继承模式中,就是子对象的构造函数调用父对象的构造函数,通过apply和...这样的话,triangle对象会继承Shape构造函数中的属性,但不会继承原型中的属性。...(); Triangle.prototype.name = 'Triangle'; 但这样有一个缺点,我们通过调用父类的构造函数继承了父类的自身属性,通过原型继承了父类的自身属性和原型,这样自身属性实际上就被覆盖了两次...下面这个模式就可以更好的解决这个问题 借用构造函数并且复制原型 其实解决上面那个自身属性被继承两次的问题也很简单,我们首先调用apply函数继承父类的自身属性,然后在复制原型属性就可以了,这个方法我们之前已经讨论过就是

67010

深入理解javascript中的继承机制 之 12种继承模式总结原型法仅从原型继承临时构造原型属性拷贝所有属性拷贝(浅拷贝)深拷贝原型继承法扩展与增强模式多重继承法寄生式继承借用构造函数构造器于

最常用的我们可以分为这两类: 基于构造器的继承模式 基于对象的继承模式 或者我们也可以如下分类: 是否使用原型 是否使用了属性拷贝 即使用原型,也使用了属性拷贝 下面我们就来总结回顾一下javascript...中的继承模式 原型法 示例: Child.prototype = new Parent(); 分类: 使用原型 基于构造器的继承模式 ** 注意 **: 默认的继承机制 我们可以将需要重用的属性和方法移到原型中...return that; } 分类: 基于对象的工作模式 使用原型 ** 注意 ** 该方法通过一个类似构造函数函数来创建对象 该函数会执行对象的拷贝,并可以进行扩展,然后返回对象 借用构造函数...: 实例: function Child() { Parent.apply(this, arguments); } 分类: 基于构造函数的模式 ** 注意 **: 仅继承自身属性 与方法一结和使用方便继承原型...); 分类: 基于构造器模式 使用原型 属性拷贝 ** 注意 ** 借用构造器与原型属性拷贝的结合 允许在不重复调用父对象构造器的情况下同时继承自身属性和原型属性

46220

javascript中常用的创建对象的方法工厂模式构造函数模式原型模式混合使用构造函数模式和原型模式小结

实际上,js在使用构造函数模式创建对象的过程中有以下的几个步骤: 创建一个新对象 将对象的作用域赋给新对象 调用构造函数中的代码为属性和方法赋值 返回新对象 其中,我们发现js帮我们封装了1,2,4等步骤...但原型模式,显然存在一个问题就是,并不是所有东西都是共享的,所以实际中,我们常常将原型模式与工厂模式或者构造函数模式结合起来。联合使用。对于那些需要共享的属性和方法,我们就把它加入到原型对象中。...** 需要注意的是,如果实例对象和原型对象中的存在相同的属性和方法,那么js会先从实例中搜寻,如果找到了就忽略原型对象中的,如果在实例中没有找到,就继续到原型中寻找 ** 混合使用构造函数模式和原型模式...创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。...,原型模式,构造函数模式和原型模式的组合使用

1.3K30

深入理解javascript中的继承机制(2)临时构造函数模式Uber – 从子对象调用父对象的接口将继承部分封装成函数

为了解决前文提到的将共有的属性放进原型中这种模式产生的子对象覆盖掉父对象同名属性的问题,就出现了另一种模式,我们称作为临时构造函数模式 临时构造函数模式 我们具体通过代码来分析 function Shape...F,然后将Shape构造函数原型对象赋给F的原型。...但在javascript中没有这样的语法,需要我们实现。...,给每个构造函数天价了一个uber属性,同时使他指向父对象的原型,然后更改了Shape的toString函数,更新后的函数,会先检查this.constructor是否有uber属性,当对象调用toString...时,this.constructor就是构造函数,找到了uber属性之后,就调用uber指向的对象的toString方法,所以,实际就是,先看父对象的原型对象是否有同String,有就先调用它。

1.6K20

JavaScript实现继承

同样,使用 JavaScript 也能实现面向对象的实现继承。以下是《高程》(第三版)的读书笔记。 原型 通过原型实现继承很容易理解,也很简单。将子类的原型指向父类的实例即可。...借用构造函数 这个方法是为了解决原型方式带来的问题,使用十分巧妙,利用了 call 方法。...借用构造函数的问题: 方法都需要在构造函数(父类或子类)中定义,无法达到函数复用的功能。 组合继承 组合继承有时也叫伪经典继承,该继承模式将原型和借用构造函数的技术结合在一起实现。...,又能使用相同的方法,融合了原型和借用构造函数的优点。...寄生组合式继承 通过借用构造函数继承属性,通过原型的混成形式来继承方法。寄生组合模式使用寄生模式来实现对父类原型继承,再将结果指定给子类的原型

49820

一篇JavaScript技术栈带你了解继承原型

原型的知识点) 3 原型对象原型JavaScript内建的继承方法被称为原型对象,又称为原型对象继承。...原型继承概念,对象继承原型对象,而原型对象继承它的原型对象。这概念说得鬼听得懂哦,what?what?what? 赏你一大嘴巴子,你妈妈买菜必涨价,超级加倍。你爷爷下象棋,必备指指点点。...,原型继承构造函数基础,实现对父类的静态及其非静态的(属性或者是方法)的继承。...: 在JavaScript继承的主要方法就是通过原型,主要是一个原型对象等于另一个类型的实例,由于实例内部含有一个指向构造函数的指针,相当于重写了该原型对象,此时该原型对象包含了一个指向另一个原型的指针...基于原型继承JavaScript对象有一个指向一个原型对象的,Object.prototype属性表示Object的原型对象。

44810

JavaScript两种继承方式详解

js可以通过构造函数原型的方式模拟实现类的功能。 另外,js类式继承的实现也是依靠原型来实现的。 原型继承与类式继承 类式继承是在子类型构造函数的内部调用超类型的构造函数。...原型继承 为了让子类继承父类的属性(也包括方法),首先需要定义一个构造函数。然后,将父类的新实例赋值给构造函数原型。...使用原型继承主要由两个问题: 一是字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数。 伪类解决引用共享和超类型无法传参的问题,我们可以采用“借用构造函数”技术。...,其背后的思路是 使用原型实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。...组合式继承是js最常用的继承模式,但组合继承的超类型在使用过程中会被调用两次;一次是创建子类型的时候,另一次是在子类型构造函数的内部 function Parent(name)

68130

强大的原型原型

当我们在属性查找时,就会不自觉的开启了我们的原型之旅 让我们通过一个简单的例子开启我们的原型查询之旅:我们使用Array构造函数创建一个数组,然后调用join方法 ?...原型在所有的function()实例上都是标准的 我们知道创建函数两种方法 1、调用Function构造函数法: ? 2、使用字面量法: ?...这一点比较简单,不管是使用原型对象还是自己的对象覆盖它,继承原型属性的实例总是能够获得新值。...如果传入参数,就遮盖继承的属性  创建继承 我们自定义的构造函数实现了原型继承,设计原型继承的目的是要在传统的面向对象编程语言中找到模仿继承模式的继承继承只是一个对象可以访问另一个对象的属性。...②如果想要更好的理解JavaScript,我们需要了解JavaScript本身是如何使用prototype对象的 ③当你自定义一个构造函数时,可以像JavaScript原生对象那样使用继承,就必须要知道他是如何工作的

806100

强大的原型原型

当我们在属性查找时,就会不自觉的开启了我们的原型之旅 让我们通过一个简单的例子开启我们的原型查询之旅:我们使用Array构造函数创建一个数组,然后调用join方法 ?...原型在所有的function()实例上都是标准的 我们知道创建函数两种方法 1、调用Function构造函数法: ? 2、使用字面量法: ?...这一点比较简单,不管是使用原型对象还是自己的对象覆盖它,继承原型属性的实例总是能够获得新值。...如果传入参数,就遮盖继承的属性  创建继承 我们自定义的构造函数实现了原型继承,设计原型继承的目的是要在传统的面向对象编程语言中找到模仿继承模式的继承继承只是一个对象可以访问另一个对象的属性。...②如果想要更好的理解JavaScript,我们需要了解JavaScript本身是如何使用prototype对象的 ③当你自定义一个构造函数时,可以像JavaScript原生对象那样使用继承,就必须要知道他是如何工作的

70480

JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象

二、组合使用构造函数模式和原型模式 为了解决原型模式不能初始化参数和共享对于引用模式所存在的问题!...这里我们可以采用构造函数模式和原型模式的结合模式来创建自定义类型,构造函数用于与解决初始化参数(实例属性的定义),原型模式用于共享  方法和constructor。...这种构造函数原型组合的模式创建自定义类型,是ECMAScript中使用最广泛、认同度最高的一种创建自定义类型的方法。可以说,这是用来定义引用类型的一种默认模式。....friends); //输出:小超,大超,Stephen Curry,Kevin Durant alert(person2.friends);//输出:小超,大超 通过上面的输出我们发现组合使用构造函数模式和原型模式创建的自定义类型及解决了...1、构造函数:构造函数创建类型相同的函数,确是不同的作用域和标识符解析(因为在JS中每创建一个函数就是一个对象,所以  (导致了构造函数中的方法)  在不同的实例中都需要重新创建一遍,但是这些方法做的确实同一件事情

1.3K60

一篇文章告诉你JavaScript 如何实现继承

不管是对象,还是函数和数组,它们都是Object的实例,也就是说在 JavaScript 中,除了原始类型以外,其余都是对象。 这也就解答了问题1:JavaScript函数怎么也是个对象?...根据这张图,我们可以得到以下的关系: 每个函数原型对象(Person.prototype)都拥有constructor属性,指向该原型对象的构造函数(Person); 使用构造函数(new Person...prototype属性,该属性为该函数原型对象; 通过将实例对象的proto属性赋值为其构造函数原型对象prototype,JavaScript 可以使用构造函数创建对象的方式,来实现继承。...其他方式实现继承 除了通过原型的方式实现 JavaScript 继承JavaScript 中实现继承的方式还包括经典继承(盗用构造函数)、组合继承原型继承、寄生式继承,等等。...原型继承方式中引用类型的属性被所有实例共享,无法做到实例私有; 经典继承方式可以实现实例属性私有,但要求类型只能通过构造函数来定义; 组合继承融合原型继承构造函数的优点,它的实现如下: function

20020

吊打前端专栏 | 吊打JavaScript之从原型原型

JavaScript对象原型 所有JavaScript对象都从原型继承属性和方法。学习如何使用对象构造器。...您现在无法对已有的对象构造器添加新属性,如果要向构造器添加一个新属性,就要把它添加到构造函数里。 原型继承 所有JavaScript对象都从原型继承属性和方法。...创建了构造函数后,其原型对象会取得 constructor属性,至于其他方法,都是从Object继承来的,当调用构造函数创建一个新实例后,该实例的内部包含一个指针,指向构造函数原型对象。...继承的主要思路是利用原型原型作为实现继承的主要方法,利用原型让一个引用类型继承另一个引用类型的属性和方法。...读取对象中的某个属性,JavaScript引擎先寻找对象本身的属性,如果找不到就到它的原型去找,如果还是找不到,就到原型原型中去找。

32620

知识点梳理

使用原型的好处是:原型对象上的所有属性和方法,都能被对应的构造函数创建的实例对象共享(这就是 JavaScript 继承机制的基本设计),也就是说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中...每一个构造函数都有一个prototype(原型)属性,这个属性就是使用构造函数创建出来的实例对象的原型对象。...“原型”的作用是,读取对象的某个属性时,JavaScript 引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型原型去找。...这种技术的基本思想:在子类型构造函数的内部调用超类型构造函数,因为函数只不过是在特定环境中执行代码的对象,因此通过使用apply()和call()方法也可以在新(将来)创建的对象上执行构造函数。...借用构造函数的优点: 相对于原型继承而言,借用构造函数有一个很的优势,即可以在子类型构造函数中向父类型构造函数传递参数。

70420

这些JS设计模式的基础知识点你都会了吗?

JavaScript中,实例对象与原型之间的链接,叫做原型。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。然后层层递进,就构成了实例与原型的链条,这就是所谓原型的基本概念。...欲完全掌握原型,笔者推荐阅读《一文搞懂JavaScript原型》 三、new操作符 new 操作符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。...child1的结构如下: 类式继承的child1实例 由此,可以看到类式继承的缺点: 不支持父构造函数带参数 父构造函数中的属性和方法都会变成公有 4.2 构造函数继承 因为类式继承的缺点,尝试使用改变构造函数指向的方式来实现继承...,在“构造函数继承”中的子类“Child”构造函数中,使用Parent.call(this, firstName) 来使得父构造函数的this指向子构造函数。...换句话说,构造函数继承方式无法继承构造函数原型方法和属性。 4.3 组合式继承 如果将类式继承构造函数继承方式结合,是否就可以解决上述遇到的继承问题呐?

34630
领券