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

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...它有别于类继承是因为继承不在对象本身,而在对象的原型上(prototype)。每个对象都有原型,在浏览器中它体现在个隐藏的__proto__属性上。在些现代浏览器中你可以更改它们。...另外就是类式继承不支持多重继承,而对于原型继承来说,你只需要写好extend对对象进行扩展即可。 组合模式 另外的种模式,是结合类继承原型继承的各自优点来进行对父类的继承。...用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为般来说,每个子类的属性都是私有的,而方法得到了统。这种模式称为组合模式,也是继承类式常用到的种方法。...从这里,我们也可以看到类继承原型基础的些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型部分。

3.4K90

js继承原型

对于使用基于类的语言,如 Java 的开发人员,js 令人困惑,因为它是动态的,并且本身不提供个 class 实现。...(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍是基于原型)。 谈到继承时,js 只有种结构:对象。...每个实例对象( object )都有个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。...该原型对象也有个自己的原型对象( proto ) ,层层向上直到个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后个环节。...几乎所有 js 中的对象都是位于原型链顶端的 Object 的实例。 尽管这种原型继承通常被认为是 JavaScript 的弱点之,但是原型继承模型本身实际上比经典模型更强大。

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

JS中的面向对象、原型原型链、继承总结大全

,基本上可以说是js中面向对象开发的种默认模式,介绍了以上这几种常用创建对象的方式, 还有其他不常用的模式就不介绍了,接下来想说的是js中比较重要的继承。...继承 什么是原型链 ECMA中继承的主要方法就是通过原型链,主要是原型对象等于另个类型的实例,由于实例内部含有个指向构造函数的指针,这时候相当于重写了该原型对象,此时该原型对象就包含了个指向另原型的指针...属性查找机制 js中实例属性的查找,是按照原型链进行查找,先找实例本身有没有这个属性,如果没有就去查找查找实例的原型对象,也就是[[prototype]]属性指向的原型对象,直查到Object.prototype...__proto__ === Object.prototype); // true 构造函数模式和原型模式组合继承 只通过原型来实现继承,还存在定问题,所以js般通过借用构造函数和原型组合的方式来实现继承...方法继承,就是上文讲的到的原型链机制继承,另外可以给子构造函数添加自己的属性和方法。 这就是经典继承,避免了但是使用构造函数或者单独使用原型链的缺陷,成为js中最常用的继承方式。

1.4K22

“工厂、构造、原型” 设计模式与 JS 继承

这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情 序言 我们在前篇文章《JS精粹,原型继承和构造函数继承的 “毛病”》 ,提到了:原型继承、构造函数继承、组合继承; 在另篇文章...《蓦然回首,“工厂、构造、原型”设计模式,正在灯火阑珊处》,提到了:我们用于创建对象的三种设计模式:工厂设计模式、构造设计模式、原型设计模式; 至此,我们可以明显的感受到:JS 要实现面向对象(继承的能力...),离不开这 3 种设计模式; 原型链 + 构造函数 = 组合继承 本篇带来个新的继承方式:寄生继承,它由工厂模式和构造函数模式组成,即 工厂+构造函数 = 寄生继承 正文 正是由于:原型继承和构造函数继承的...// true SuperType.prototype.constructor === SubType.prototype.constructor // true 小结 只要是写 JS继承定离不开......... u1s1,class 出来前,写 JS 实现继承,是真滴麻烦QAQ 我是掘金安东尼 100 万阅读量人气前端技术博主 INFP 写作人格坚持 1000 日更文 ✍ 关注我,陪你起度过漫长编程岁月

1K30

js的this、call、apply、bind、继承原型

本文来自我的github 0.前言 这些都是js基础进阶的必备了,有时候可能下子想不起来是什么,时不时就回头看看基础,增强硬实力。...bind后,以后无论怎么用call、apply、bind,this指向都不会变,都是第次bind的上下文 3.从call到继承 首先,js没有严格意义上的子类父类,实现继承是依靠原型链来实现类似于所谓的类的效果...3.2 prototype继承 要想子类获得父类的属性,如果是通过原型来实现继承,那么就是父类的个实例是子类的原型: function F(){ this.a = [1,2,3,4] this.b...但是=赋值操作相当于直接在某个实例上面改写。因为属性查找是按照原型链查找,先查找自身再查找原型链,找到为止。用了等号,先给自身赋值,所以自身赋值成功了也不会继续去原型链查找。...但是实例化都会调用两次构造函数,new和call 3.3Object.create继承原型继承) 这样子,可以在两个prototype中间加上个中介F类,使得子类不会污染父类,子类A是父类B继承而来

88010

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

因为这门语言设计就是这样,我们之前也提过:JavaScript的语言设计主要受到了Self(种基于原型的编程语言)和 Scheme(门函数式编程语言)的影响; 它复用的能力就是来自原型!...好了,有这个认知基础,我们再看原型继承原型继承 原型继承最直接的种实现就是:原型继承 ECMA-262 把原型链定义为 ECMAScript 的主要继承方式。...} let s1 = new SubType() let s2 = new SubType() console.log(s1.fn === s2.fn) // false 而这点,在原型继承中...构造函数继承:子类不能访问父类原型上的方法。 咱就是说,这东西怎么这么拧巴呢。。。 于是乎个规避二者“毛病”的继承方式出现了:组合继承~~ 组合继承 目前最流行的继承模式是组合继承!...说实话,JS 继承真的很奇怪。。。并不是面向对象语言,又要通过原型链去模拟面向对象,真的很多小坑的点需要去注意。

1.2K20

JS原型链与继承别再被问倒了

原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承继承方法签名,而实现继承继承实际的方法....由于js中方法没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支持实现继承,而且其 实现继承 主要是依靠原型链来实现的....以上我们弄清楚了何为原型链,如有不清楚请尽量在下方给我留言 ---- 确定原型和实例的关系 使用原型链后, 我们怎么去判断原型和实例的这种继承关系呢? 方法般有两种....组合继承 组合继承, 有时候也叫做伪经典继承,指的是将原型链和借用构造函数的技术组合到块,从而发挥两者之长的继承模式....提醒: 原型继承中, 包含引用类型值的属性始终都会共享相应的值, 就像使用原型模式样. 寄生式继承 寄生式继承是与原型继承紧密相关的种思路, 同样是克罗克福德推而广之.

58650

JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇

Git专栏:Git篇 JavaScript专栏:js实用技巧篇,该专栏持续更新中,目的是给大家分享些常用实用技巧,同时巩固自己的基础,共同进步,欢迎前来交流 你的键三连是对我的最大支持 ❤️...文章目录 ✔️前言 内容 继承 伪经典模式/圣杯模式 类语法 总结 ✔️前言 ❗️ ❗️ ❗️本篇系将带来JavaScript中的构造——原型——原型链——继承——ES6类语法系列知识完整讲解。...❗️ ❗️ ❗️ ❕上篇涉及:构造——原型——原型链 ❕下篇涉及:继承——ES6类语法 内容 继承 初认识 此处我们就以通常在各种平台所见到的会员与非会员举例: 普通会员 属性:用户名、密码 方法:...如何在JS中封装继承?...,其缺陷就是属性在实例化对象上面会有份,在原型对象上面也会有份,从而造成内存的浪费。

65610

JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】上篇

Git专栏:Git篇 JavaScript专栏:js实用技巧篇,该专栏持续更新中,目的是给大家分享些常用实用技巧,同时巩固自己的基础,共同进步,欢迎前来交流 你的键三连是对我的最大支持 ❤️...文章目录 ✔️前言 内容 构造函数 原型 原型链 总结 ✔️前言 ❗️ ❗️ ❗️本篇系将带来JavaScript中的构造——原型——原型链——继承——ES6类语法系列知识完整讲解。...❗️ ❗️ ❗️ ❕上篇涉及:构造——原型——原型链 ❕下篇涉及:继承——ES6类语法 内容 构造函数 何为构造函数?...由于JS中所有对象都是通过new产生的,因此,严格来说,JS中所有对象都称之为实例 //例: const obj = { a:'0', b:'1', c:'2' } //上面等价于var obj =...下篇为大家带来继承思想,以及经典的★圣杯模式★… 我的博客即将同步至腾讯云开发者社区,邀请大家同入驻:https://cloud.tencent.com/developer/support-plan

69420

图弄清JavaScript的继承原型

其中Function、Object是JavaScript的内建类,JavaScript的类实际上是个function 而function对象会凭空多出个prototype属性 这就是切困扰的起源...凡是function类型的对象,constructor都指向Function,包括Function自己 凡是function类型的对象,原型(__proto__)都指向Function.prototype...包括Function自己 切function都是Function类的实例,Function又是继承自Object。...function对象默认会自带个prototype属性,这个属性是个Object类型,般该属性对象都能从其__proto__属性去寻找父类,唯独Object.prototype的__proto__...比如说,把个function对象的prototype删除掉,那么就无法继承这个对象了。系统中的Proxy就是这种货色。

16430

JS原理学习 (2) 》深入理解原型链与继承

前言 JavaScript是门面向对象的语言,所有的对象都从原型继承属性和方法,那么什么是原型?对象与对象之间如何实现继承?...// {constructor: Person(), __proto__} 上述代码中我们创建了个名为Person的函数: prototype属性指向的就是Person的原型(每个除null外的JS...对象在创建的时候都会关联到另个对象,这个关联的对象就是原型) 每个对象都会从原型继承”属性 原型对象里包含constructor与__proto__属性。...}}) 修改原型对象指向实现继承 上个章节中,我们使用个中间函数实现了原型链的继承。...写在最后 本文为《JS原理学习》系列的第2篇文章,本系列的完整路线请移步:JS原理学习 (1) 》学习路线规划

28130

总结js原型原型

最近学习了js的面向对象编程,原型原型链这块是个难点,理解的不是很透彻,这里搜集了些这方面的资料,以备复习所用 ....原型与构造函数   Js所有的函数都有个prototype属性,这个属性引用了个对象,即原型对象,也简称原型。...但是,旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有对象,都继承了这些原型属性和原型方法,这是通过内部的_proto_链来实现的。   ...这种继承方式即是类继承js没有类,这里只是指构造函数),虽然继承了A构造对象的所有属性方法,但是不能继承A的原型对象的成员。而要实现这个目的,就是在此基础上再添加原型继承。   ...虽然不加16行不影响obj的属性,但如上段说,却影响obj.constructor和obj.constructor.prototype。所以在使用了原型继承后,要进行修正的操作。

98050

JS基础-关于原型原型链的

raw=true] JS原型原型直是比较难理解的内容,不少初学者甚至有定经验的老鸟都不定能完全说清楚,更多的"很可能"是知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个概念知半解...不要再使用__proto__: 本段摘自阮-ES6入门,具体解析请点击链接查看 __proto__属性没有写入 ES6 的正文,而是写入了附录。...原型继承就是利用构造调用函数的特性: SubType.prototype = new SuperType(); // 原型继承:SubType继承SuperType // 挂载SuperType的this...**对象的原型可能也是继承其他原型对象的**: `foo.prototype`也有它的原型`Object.prototype`。 3. **层的,以此类推,这种关系就是原型链**。...### 个对象是否在另个对象的原型链上 > 如果个对象存在另个对象的原型链上,我们可以说:它们是继承关系。

1.4K60

文看懂 JS 继承

文看懂 JS 继承 最近回顾 js 继承的时候,发现还是对些概念不是很清晰。...这里再梳理JS继承的几种主要的方式,构造函数继承原型继承、组合继承以及原型继承、寄生式继承、寄生组合式继承和 ES6 的 Class: 构造函数继承 构造函数继承没有用到 prototype...属性呢 // 如果使用 Child.prototype = Parent.prototype 那么 constructor 子类父类是同原型继承 原型继承直接使用 ES5 Object.create...构造函数式、组合式、原型式、寄生式而形成的种方式: 组合继承的方法会调用两次 Parent,次是在 Child.prototype = new Parent() ,次是在 Parent.call(...这个是组合继承的唯缺点,寄生组合式解决了这个问题: ? 公有的写在原型 ? 私有的写在构造函数 ? 可以向父类传递参数 ?

88220

文搞懂JS原型

JavaScript中的原型链是个非常有魔力的东西 在javascript中,实例对象与原型之间的链接,叫做原型链。其基本思想是利用原型个引用类型继承个引用类型的属性和方法。...__ js中所有的函数都有个prototype的属性,该属性引用了个对象,该对象叫做原型对象 js中每个对象都有个__proto__属性,该属性指向它构造函数的prototype ---- 0x02...---- 0x04 原型链 通过上面的问题,自然就引入了“原型链”的概念,在这条__proto__的链路上,最终所有都指向了Object 为了在整体上有个清晰的概念,我做了幅图 图看懂原型链...开始的描述当中,又看到“继承”这个关键词,对于熟悉了面向对象的小伙伴,没什么理解难度,入门小伙伴可以理解为“子承父业,青出于蓝而胜于蓝” 过于抽象,举个栗子 不举了,emmm。。。...---- REFERENCE [1] 什么是javascript原型链? [2] JS构造函数理解

2K30
领券