Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >理想的继承范式——寄生组合式继承

理想的继承范式——寄生组合式继承

作者头像
就只是小茗
发布于 2018-12-12 10:01:42
发布于 2018-12-12 10:01:42
52300
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 window.onload = function() {
 2     var person1 = new SubType("Gee", 20);
 3     var person2 = new SubType("Key", 21);
 4 
 5     person1.colors.push("yellow");
 6     alert("person1: " + person1.colors);    // red, blue, green, yellow
 7     alert("person2: " + person2.colors);    // red, blue, green
 8 
 9     person1.sayName();    // Gee
10     person2.sayAge();    // 21
11 };
12 
13 function object(o){
14     function F() {}
15     F.prototype = o;
16     return new F();
17 }
18 
19 /**
20  * 继承超类型的方法
21  * @param  {Object} subType   子类型
22  * @param  {Object} superType 超类型
23  * @return {null}
24  */
25 function inheritPrototype(subType, superType) {
26     var prototype = object(superType.prototype);    // 创建对象
27     prototype.constructor = subType;    // 增强对象
28     subType.prototype = prototype;    // 指定对象
29 }
30 
31 function SuperType(name) {
32     this.name = name;
33     this.colors = ["red", "blue", "green"];
34 }
35 
36 SuperType.prototype.sayName = function() {
37     alert(this.name);
38 };
39 
40 function SubType(name, age) {
41     SuperType.call(this, name);    // 继承属性,并传递参数,子类型将具有独立属性而非共享属性
42 
43     this.age = age;
44 }
45 
46 inheritPrototype(SubType, SuperType);
47 
48 SubType.prototype.sayAge = function () {
49     alert(this.age);
50 };
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【说站】javascript组合继承是什么
以上就是javascript组合继承的介绍,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
2940
JavaScript寄生式组合继承
组合继承也被称为伪经典继承,它综合了我们昨天说的原型链和盗用构造函数,将俩者的有点结合在了一起。它的基本思想是使用原型链继承原型上的属性和方法,通过盗用构造函数继承实例属性,这样的好处就是可以把方法定义在原型上复用,每个实例又有自己的属性。
大熊G
2022/11/14
3310
js程序设计03——面向对象
ECMAScript中有2中属性:数据属性、访问器属性。 数据属性是为了指定某对象的指定key上的一些行为,比如value是否可删除、修改、key可循环遍历等特点。而访问器属性不包含数据值,包含一堆g
用户1141560
2017/12/26
1.2K0
js程序设计03——面向对象
JavaScript(七)
这一篇,我们说说 ES 中的面向对象。 ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。 ECMA-262 把对象定义为: “无序属性的集合,其属性可以包含基本值、对象或者函数。” 对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。我们可以把 ECMAScript 的对象想象成散列表: 一组键值对,其中值可以是数据或函数。
1ess
2021/10/29
3250
JavaScript实现继承的6种方式
  许多面向对象语言都支持两种继承的方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。在 JavaScript 中由于函数没有签名也就无法实现接口继承,而只支持实现继承,而且实现继承主要通过原型链来实现的。
Leophen
2019/08/24
8490
JavaScript之对象继承
该方法创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
laixiangran
2018/07/25
4690
javaScript 的面向对象程序
数据属性(数据属性包含一个数据值的位置,这个位置可以读取和写入值,数据属性有4描述)
用户1197315
2019/12/30
1.2K0
JavaScript 面试要点: 继承
ECMA-262 把原型链定义为 ECMAScript 的主要继承方式。其基本思想就是通过原型继承多个引用类型的属性和方法。对属性和方法的搜索会一直持续到原型链的末端。
Cellinlab
2023/05/17
2000
JavaScript 面试要点: 继承
深入理解javascript对象
对象被定义为一组属性的无序集合,对象就是一组没有特定顺序的值。对象的每个value值都由一个key来标识,一个key映射一个value值。
javascript艺术
2022/11/22
4090
一文完全吃透 JavaScript 继承(面试必备良药)
继承给我们提供了一种优雅可复用的编码方式,继承也是面试中经常被问到的问题,本文全面总结了JavaScript 中的继承类型、各个继承类型的优缺点及使用场景等,一文吃透 JavaScript 继承,收藏起来吧~
winty
2020/02/24
4680
一文完全吃透 JavaScript 继承(面试必备良药)
JavaScript实现继承
本文不准备深入细节,主要是对《JavaScript高级程序设计中》介绍的JS如何实现继承做一个总结,毕竟好记性不如烂笔头。文末会附带一张神图,搞清楚这张图,原型链也就没有什么问题了。
leocoder
2018/10/31
7010
JS继承有哪些,你能否手写其中一两种呢?
本篇是 JS系列中第 3 篇,文章主讲 JS 继承,包括原型链继承、构造函数继承、组合继承、寄生组合继承、原型式继承、 ES6 继承,以及 多继承与 new 。
helloworld1024
2022/10/17
4280
来自原形与原型链的拷问
在JS中,我们经常会遇到原型。字面上的意思会让我们认为,是某个对象的原型,可用来继承。但是其实这样的理解是片面的,下面通过本文来了解「原型与原型链」的细节,再顺便谈谈继承的几种方式。
JowayYoung
2020/04/01
5420
来自原形与原型链的拷问
“工厂、构造、原型” 设计模式与 JS 继承
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
掘金安东尼
2022/09/19
1.1K0
面向对象编程
面向对象把构成问题的transaction分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为,意在写出通用代码,加强代码重用,屏蔽差异性。
子舒
2022/06/09
7360
面向对象编程
前端-一篇文章理解 JS 继承
说实在话,以前我只需要知道“寄生组合继承”是最好的,有个祖传代码模版用就行。最近因为一些事情,几个星期以来一直心心念念想整理出来。本文以《JavaScript高级程序设计》上的内容为骨架,补充了ES6 Class的相关内容,从我认为更容易理解的角度将继承这件事叙述出来,希望大家能有所收获。
grain先森
2019/03/28
8510
前端-一篇文章理解 JS 继承
重读《JavaScript高级程序设计》
ECMAScript 函数不能像传统意义上那样实现重载。而在其他语言(如Java)中,可以为一个函数编写两个定义,只要这两个定义的签名(接受的参数类型和数量)不同即可[p66]。ECMAScript的类型是松散形的,没有签名,所以是没有重载的。
Jimmy_is_jimmy
2019/07/31
1.1K0
Javascript 组合继承 原型链继承 寄生继承
该继承通过构造函数继承原型链的方法和父类的属性,但该方法会有两次调用父类,第一次是在继承原型链,第二次在继承属性。
菜的黑人牙膏
2019/01/21
1.2K0
JavaScript实现继承的6种方式
创建 Father 的实例,并赋值给 Son 的原型 Son.prototype。实现了 Son 继承 Father,
andyhu
2023/06/18
5201
JS 继承的多种方法
学过java的同学应该都知道,继承是java的重要特点之一,许多面向对象的语言都支持两种继承方式:接口继承和实现继承,接口继承只继承方法签名,而实现继承则继承实际的方法,在js中,由于函数没有签名,因此支持实现继承,而实现继承主要是依靠原型链来实现的,那么,什么是原型链呢?
grain先森
2019/03/28
2.9K1
JS 继承的多种方法
相关推荐
【说站】javascript组合继承是什么
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验