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

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

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

39020
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript原型继承

几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。 尽管这种原型继承通常被认为是 JavaScript 的弱点之一,但是原型继承模型本身实际上比经典模型更强大。...例如,在原型模型的基础上构建经典模型相当简单。 ---- 基于原型链的继承 继承属性 JavaScript 对象是动态的属性“包”(指其自己的属性)。...在 JavaScript 里,任何函数都可以添加到对象上作为对象的属性。函数继承与其他的属性继承没有差别,包括上面的“属性遮蔽”(这种情况相当于其他语言的方法重写)。...当继承函数被调用时,this 指向的是当前继承的对象,而不是继承函数所在的原型对象。...p.m 时,'this' 指向了 p // 又因为 p 继承了 o 的 m 函数 // 所以,此时的 'this.a' 即 p.a,就是 p 的自身属性 'a' 在 JavaScript 中使用原型

51210

JavaScript原型继承

什么是原型继承?在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。...当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript会自动去它的原型对象中查找。...如果原型对象也没有找到,JavaScript会继续在原型对象的原型上查找,这样形成了一个原型链。原型继承是基于原型链的继承机制。通过将一个对象的原型指向另一个对象,从而实现对属性和方法的继承。...子对象无法直接给父对象的构造函数传递参数,因为原型对象已经被实例化。原型继承的注意事项在使用原型继承时,需要注意以下几点:避免直接修改原型对象:直接修改原型对象可能会影响所有继承了该原型链的对象。...在构造函数中初始化实例属性:由于原型继承无法在子对象中传递参数给父对象的构造函数,如果需要在构造函数中初始化实例属性,应该在子对象的构造函数中进行处理。

35710

构造函数原型原型链、继承

__proto__.split; //true 每个函数只要被创建就会有一个prototype属性,它的值就是原型对象(所以访问原型对象有两条途径:函数的prototype、实例对象的__proto_...继承 有了原型链的概念就可以开始实现继承了,最基本的模式就是修改原型对象: function Father(){ this.say = function(){return this.name} }...,实例对象会互相影响,而且在调用Child函数时无法给Father函数传参,所以我们需要更加实用的继承方式。...省略分析推导过程,这里只介绍最实用和可靠的实现继承的方式:组合继承,为了方便描述,引入“父类函数”和“子类函数”这两个概念: //父类函数 function Father(name, age){ this.name...总之利用原型链实现可靠继承的步骤是: 在父类函数内设置通用的属性 在子类函数内调用父类函数,并设置特有的属性 修改子类函数的prototype,以继承父类 修改子类函数的prototype.constructor

73720

JavaScript继承原型

当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object)都有一个私有属性(称之为 __proto__)指向它的构造函数原型对象(prototype)。...基于原型链的继承 继承属性 JavaScript的对象是动态的,JavaScript的对象其实就是动态的变量属性的容器,也就是键值对的容器。...在JavaScript当中,任何函数都可以作为对象的属性,函数继承与其他的属性继承没有区别,包括对属性的重写。...看看emp的原型链体会一下。当继承函数被调用时,this指向的是当前对象,而不是原型对象,这点与一般的面向对象语言一直。...在JavaScript当中使用原型链 因为JavaScript是基于原型的,因此函数是允许拥有属性的,如图。所有的函数都有一个特别的属性——prototype。

14620

JavaScript原型链与继承

__proto__); // 原型对象的原型对象的构造函数是谁 console.log(xiaoming.__proto__....__proto__.constructor) 函数也是对象。JavaScript函数是一等公民,函数是对象。函数也是对象,只不过自己能()执行。...构造函数继承 使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型) function People(name,age){ this.name = name; this.age..., 只能继承父类的实例属性和方法,不能继承原型属性/方法,无法实现函数复用,每个子类都有父类实例函数的副本,影响性能 3....组合继承 就是将原型继承和构造函数继承组合在一起;继承两个优点 通过调用父类构造,继承父类的属性并保留传参的优点, 然后再通过将父类实例作为子类原型,实现函数复用 function People(name

1.5K50

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

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

66110

如果使用 JavaScript 原型实现继承

作者:Indermohan Sing 译者:前端小智 来源:blog 在这篇文章中,我们将讨论原型以及如何在 JS 中使用它们进行继承。我们还将会看到原型方法与基于类的继承有何不同。...例如,类C继承自类B,而类B继承自类A 值得注意的是,类本身并没有做任何事情。在从类创建对象之前,实际上没有完成任何工作。我们将看到它为什么不同于JavaScript。...相反,当我们在函数原型上创建它时,对象的所有实例只共享方法的一个副本,显然使用原型的方式效率会过高。 大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】。...使用原型继承的各种方法 在 JS 中,无论我们如何创建对象,只有原型继承,但这些方式还有一些区别,来看看: 对象字面量 在JavaScript中创建对象的最简单方法是使用对象字面量: let obj =...这类似于在面向对象的世界中调用父级的构造函数。 接下来的事情是,我们必须从SmartPhone构造函数继承方法。

67320

JavaScript进阶-原型链与继承

JavaScript中,原型链和继承是理解对象间关系和实现代码复用的核心概念。这两个机制共同构成了JavaScript面向对象编程的基础。...构造函数原型方法混淆:错误地在构造函数内定义共享方法,而不是放在原型上。 避免策略 谨慎扩展原生原型:尽量不在原生对象的原型上添加属性或方法,以免造成全局影响。...继承:代码复用的艺术 继承方式 JavaScript提供了多种实现继承的方式,包括但不限于: 原型继承:通过将子类型的原型设置为父类型的实例。...构造函数继承:通过在子类构造函数内部调用父类构造函数。 组合继承(常用):结合原型继承和构造函数继承。 ES6 Class继承:基于class关键字的语法糖,简化了继承过程。...易错点与避免策略 易错点: 原型链循环:错误的原型链设置可能导致无限循环。 方法覆盖:子类无意中重写了父类的方法。 借用构造函数问题:只继承了父类的实例属性,未继承原型上的方法。

5910

JavaScript难点:原型原型链、继承、new、prototype和constructor

原型 原型(prototype)是 JavaScript 中对象的一个特殊属性,它用于实现属性和方法的继承。...继承 JavaScript 不像 Java、C++ 这种纯面向对象的语言,可以通过类实现继承JavaScript中的继承是通过原型实现的,即使 ES6 中新增的 class 类也只是原型的语法糖而已。...prototype JavaScript 规定,每一个构造函数都有一个 prototype 属性(其实普通函数也有的,构造函数本身就是一个普通函数),指向另一个对象。...为什么通过 prototype 修改原型实现继承后要重置 custructor?...我们可以通过将一个构造函数的 prototype 指向另一个构造函数来实现继承父类的属性和方法,但是往往还会额外加一个 Child.prototype.constructor = Child,这是因为直接通过

10010

动图学 JavaScript 之:原型继承

其实这些都因为一个叫做 原型继承(prototypal inheritance) 的东西。它太棒啦,你平时也经常会用到,只不过可能没有注意! 构造函数 我们经常需要创建很多相同类型的对象。...原型继承 好吧~那么为什么需要有该属性对象呢?首先,让我们来创建几只狗狗。简单起见,我们就叫它们 dog1 和 dog2。dog1 叫 Daisy,是一只可爱的拉布拉多(Labrador)!...这就是 原型继承 的全部内容:构造函数创造的每个实例都能够访问构造函数原型。 ? 原型继承的好处 那么为什么这很酷?有时候我们拥有每个实例共享的属性。...ES6 中的类 前面我们使用的是构造函数的方式(function Dog() { ... }),实际上 ES6 中提供了构造函数原型的更简单的语法:类(Classes) 类 只是 构造函数 的 语法糖...全文就到这里啦,希望对你学习原型继承有帮助~ 参考链接 JavaScript Visualized: Prototypal Inheritance ---- 本文首发于公众号:码力全开(codingonfire

53520

Javascript原型继承,说清楚

一直以来对Javascript原型原型链、继承等东西都只是会用和了解,但没有深入去理解这门语言关于继承这方面的本质和特点。闲暇之余做的理解和总结,欢迎各位朋友一起讨论。...function Child(){ Parent.call(this) this.Age = 'Age' } Child.prototype = Parent.prototype; //原型继承...F.prototype.constructor = childs; return new F(); } Child.prototype = Inher(Parent,Child); //原型对象继承...对象是否是父类、子类的实例判断都是一致的 父类、子类都是在对象的原型链上 prototype(原型)上的属性通过hasOwnProperty判断是false 通过构造函数创建的属性,可以通过HasOwnProperty...如果是多级继承,第一段代码的模式原始链始终只有两层,而第二段代码的模式原型会有层级关系。

49290

Javascript 类、原型链、继承的理解

Javascript中,每当我们定义一个构造函数Javascript引擎就会自动为这个类中添加一个prototype(也被称作原型) 2.对象的 proto 是什么?    ...这就是Javascript著名的原型链的结果啦。话不多说,先上图: ? 当我们访问person.name时,发生了什么呢?...console.log(person_1.eat === person_2.eat) // true 这里我们在构造函数写了一句:Human.prototype.eat = function() {...这样我们就可以定义一个类,把它叫做父类,在它的里面包含所有的这些子类所具有的相同的【属性/方法】,然后通过继承的方式,让所有的子类都可以访问这些【属性/方法】,而不用每次都在子类的定义中去定义这些【属性...Son对象都会有不同的name属性值,于是就实现了子类继承了父类的非静态【属性/方法】 4.组合方式实现继承(组合 原型继承 + 构造函数继承) 顾名思义,就是结合上述两种方法,然后同时实现对父类的静态及非静态

64110

《现代Javascript高级教程》JavaScript中的原型继承

现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 原型原型JavaScript是一门支持面向对象编程的语言,它的函数是第一公民,同时也拥有类的概念。...原型的概念可以用以下方式解释:每个JavaScript对象都是基于一个构造函数创建的,构造函数是对象的模板或蓝图。...在创建对象时,构造函数会创建一个关联的原型对象,对象通过原型继承原型对象上的属性和方法。原型对象是一个普通的JavaScript对象,它具有自己的属性和方法。...通过构造函数,我们可以创建对象实例,并且这些实例可以通过原型对象继承原型上的属性和方法。 原型原型链是 JavaScript 中对象之间通过原型链接起来的机制,用于实现属性和方法的继承。...原型继承 原型继承是一种通过继承原型对象来创建新对象的方式。在 JavaScript 中,我们可以使用多种方式实现原型继承

21440
领券