【Infragistics教程】在javascript构造函数中创建基本继承

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

【下载Infragistics Ultimate最新版本】

用javascript创建对象有四种方法。具体如下:

  1. 对象作为文本
  2. 构造函数调用模式
  3. 创建()方法
  4. 在ES6之后使用类

继承的实现因对象创建方法而异。本文将解释如何在函数构造函数之间创建继承。

假设您有一个函数:

1

2

3

4

function animal(name, age) {

    this.name = name;

    this.age = age;

}

如果使用new操作符调用animal函数,将创建一个对象。这种对象创建方式也称为“构造函数调用模式”。

1

2

3

4

var dog = new animal('foo', 5);

console.log(dog);

var cat = new animal('koo', 3);

console.log(cat);

对象dog和cat都有自己的名称和年龄属性。如果希望在所有对象之间共享属性或方法,请将其添加到函数原型中。

1

2

3

4

animal.prototype.canRun = function () {

  

    console.log('yes ' this.name + ' can run !');

}

使用javascript原型链,dog和cat对象都可以访问canrun方法。

1

2

3

4

5

var dog = new animal('foo', 5);

dog.canRun(); // yes foo can run

 

var cat = new animal('koo', 3);

cat.canRun(); // yes koo can run

接下来,让我们创建另一个构造函数——人:

1

2

3

4

5

6

7

8

function human(name, age, money) {

    this.name = name ;

    this.age = age ;

    this.money = money;

}

human.prototype.canEarn = function () {

    console.log('yes ' this.name + 'can earn');

}

此时,人与动物的功能没有任何关系。然而,我们知道人也是动物。人工构造有两个问题。

  1. 它有重复的名称和年龄初始化代码。为此,应使用动物建造师。
  2. 它与动物建造师没有任何联系

上述两个问题可以通过在动物和人类功能构建者之间创建继承来消除。

您可以通过如下修改人工函数来解决代码复制的问题1:

1

2

3

4

function human(name, age, money) {

    animal.call(this, name, age);

    this.money = money;

}

现在,在人类函数中,我们使用call方法手动传递当前对象作为动物函数中“this”的值。这种方法也称为间接调用模式。现在,可以创建一个人类对象实例,如下所示:

1

2

var h1 = new human('dj', 30, '2000 $');

console.log(h1);

到目前为止,我们已经解决了代码复制的第一个问题,但是人类的功能仍然与动物的功能无关。如果您尝试对h1对象调用canrun方法,javascript将向您抛出一个错误。

1

h1.canRun(); // throw error canRun is not a function

您可以通过将人类功能原型与动物功能构造函数原型链接来解决这个问题。有两种方法可以做到这一点。

使用γ原型

使用object.create()方法

您可以使用object.create()链接函数构造函数的原型,如下所示:

1

human.prototype = Object.create(animal.prototype);

您可以使用_uu proto_uuu链接函数构造函数的原型,如下所示:

1

human.prototype.__proto__ = animal.prototype;

更推荐object.create()方法,因为在许多浏览器中可能不支持_uuProto。在链接原型之后,在一种方式下,您已经在动物和人类函数构造函数之间创建了继承。人的对象实例可以读取动物功能的所有属性,并且可以执行动物功能方法。

下面列出了实现函数构造函数之间继承的完整源代码,供您参考:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

function animal(name, age) {

  

    this.name = name;

    this.age = age;

  

}

  

animal.prototype.canRun = function () {

  

    console.log('yes ' this.name + ' can run !');

}

  

var dog = new animal('foo', 5);

dog.canRun();

  

var cat = new animal('koo', 3);

cat.canRun();

function human(name, age, money) {

    animal.call(this, name, age);

    this.money = money;

}

  

human.prototype = Object.create(animal.prototype);

  

human.prototype.canEarn = function () {

    console.log('yes ' this.name + 'can earn');

}

// human.prototype.__proto__ = animal.prototype;

var h1 = new human('dj', 30, '2000 $');

h1.canRun();

h1.canEarn();

要在函数构造函数之间创建继承,请始终执行以下两个操作:

  1. 使用call或apply调用父构造函数。
  2. 将子构造函数原型链接到父构造函数原型

转载于:https://my.oschina.net/u/4009527/blog/2995846

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

switch芯片和phy芯片的区别_感应式芯片卡CPU卡的FM1208-9和FM1208-10有什么区别,你知道吗?...

感应式CPU卡是目前芯片卡中安全系统较高的芯片,使用范围也较为广泛,但是这款CPU分为FM1208-9和FM1208-10,那你们知道分别代表什么意思呢?他们之间有什么不同呢?CPU白卡FM是什么?首先,我们来说下…

每次登陆都要滑动验证_湖人队冠军成员卡鲁索很吃香:每次谈判都有N支球队点名要他...

10月24日NBA直播台讯:洛杉矶湖人队助理教练迈克-彭伯西在接受媒体采访时透露,湖人队替补控球后卫卡鲁索目前在联盟中很吃香。湖人队每次进行交易谈判时,对方球队都点名想要卡鲁索。彭伯西表示:“每一次我们在休赛期或者交易截止日…

MySQL在DOS指令里面的使用以及增删改查的使用

本人的第一条博客,选中我的电脑单机右键,点开管理,选中服务找到MySQL57.启动该服务。回退至桌面,按住winR 输入cmd打开DOS指令的窗口。 在窗口输入: mysql -h localhost -u root -p 显示password输入提示:表示已经…

安卓应用用户数据_用户指标数据应用

一、如何理解数据用户数据:gender:性别、 birthday:出生日期行为数据:user_id:用户id、auction_id:购买行为编号、buy_mount:购买数量、day:购买时间商品数据:cat_id:商品种类ID、cat1:商品类别、property:商品属性二、用户数据指标1.用户数据…

webgis从基础到开发实践_开源WebGIS教程系列——11.1 GISLite 的开发背景与设计

地理信息门户可以帮助人们更容易地发现、访问和使用地理空间信息, 是地理信息发布、服务和共享的重要环节。许多国家都很重视地理信息门户的 建设,把它作为国家空间数据基础设施(spatial data infrastructure,SDI)的重要组成部分。GISLite 是…

Oracle数据库及在DOS命令下面的简单操作

在Oracle数据库注释用--表明为注释,但以下用//或--代表解释;数据库不怎么区分大小写; 先说说一些简单Oracle数据库操作的语句: 使用语句创建普通用户: Create user username identified by password; //创建普通用户 Grant reso…

CSS属性(display)

1.display属性 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>08display属性</title><style>.c1 {background-color: red;/*display: none; !* 让其在页面上不显示 *!*//*display: i…

产品发布系统_【产品发布】第3期|阀门遥控系统

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;常熟瑞特电气股份有限公司的阀门遥控系统是一款经典的产品线&#xff0c;包括了全系列的液压执行器&#xff0c;电液执行器&#xff0c;微型动力单元&#xff0c;液压动力泵站&#xff0c;液压电磁阀箱等产品。阀门遥控…

大数据就业前景,分析的太到位了

大数据广泛应用于电网运行、经营管理及优质服务等各大领域&#xff0c;并正在改变着各行各业&#xff0c;也引领了大数据人才的变革。大数据就业前景怎么样&#xff1f;这对于在就业迷途中的我们是一个很重要的信息。 随着大数据时代的到来【这次国家教育部也改革动真格了】&am…

多麦克风做拾音的波束_麦克风丨人声应该用动圈话筒还是电容话筒?

无论是在您最喜欢的乐队的纪录片中&#xff0c;还是在电影中那些有关录音棚里的场景中&#xff0c;似乎都存在着一个共同的主题&#xff0c;那就是&#xff1a;歌手们都在使用大振膜的电容麦克风进行录音。我知道人们应该从别人的经验中汲取精华&#xff0c;事半功倍。但是我并…

java框架mybatis配置文件总结一

先新建个java EE的项目 该配置文件必须在src的目录下面&#xff0c; 新建一个xml 文件&#xff1a; 建完后发现它会自动建在web目录下面&#xff0c;我们把这个文件移到src目录下面&#xff1a; &#xff08;注&#xff1a;对了&#xff0c;该文件的编码最好用utf-8的no bom,…

测试:脱离VS2010使用自动化测试时出现 6DA215C2-D80D-42F2-A514-B44A16DCBAAA 错误

在前一系列IronRuby中一直是围绕这UI自动化测试来写的&#xff0c;今天基本测试框架完成了&#xff0c;测试人员没有安装VS2010&#xff0c;不知道能否跑&#xff0c;所以就在测试人员机器上跑跑看&#xff0c;但是问题就出现了 现象 运行run.bat跑单元测试时&#xff0c;出现以…

Linux的远程连接及Linux系统下Tomcat部署

Linux的远程需要用的软件有Xshell&#xff0c;Xftp 本人使用VMware12Pro虚拟机&#xff0c;Linux系统为CentOS7&#xff0c;使用局域网进行远程连接 Xshell和Xftp没有安装的话可以取官网下载&#xff0c;但Xshell需要验证信息&#xff0c;所以也可以去360电脑软件下载 在VMw…

uniapp图标_uniapp扩展自定义uniIcon组件图标

1、访问Iconfont-阿里巴巴矢量图标库&#xff0c;下载自己想要的图片&#xff0c;下载svg格式备用2、通过百度字体编辑器打开本地最新的uni.ttf文件(http://fontstore.baidu.com/static/editor/index.html#)&#xff0c;打开之后可以看到所有的uni所有图标都在里面3、导入第一步…

Spring Boot 日志的使用及logback.xml的使用

当前是市场上使用的日志框架有很多&#xff0c;比如&#xff1a;JUL、JCL、Jboss-logging、logback、log4j、slf4j....等等&#xff1b; 但是日志主要分为两类&#xff0c;日志门面和日志实现两类&#xff1b;日志门面可以说是日志框架的抽象层&#xff0c;主要实现是的日志实…

MongoDB数据库的迁移

最近公司开始要换服务器啦&#xff0c;MongoDB上面的数据又得迁移&#xff0c;还是记录一下比较好。 1&#xff09;、将MongoDB的压缩包解压至相对应的路径(压缩文件在本地服务器的地址192.168.0.22的/opt/zip文件下面) 2&#xff09;、配置好mongodb.conf文件&#xff0c;配…

excel vba 如何将日期周几转换成文字_这5个超实用的Excel技巧,让你的办公效率更高...

导读&#xff1a;对于办公职员来说&#xff0c;Excel是几乎每天都会接触的办公软件。在Excel中&#xff0c;有非常多的小技巧&#xff0c;学习这些小技巧需要不断的积累和应用&#xff0c;今天指北针就来给大家分享5个超实用的Excel技巧&#xff0c;让办公变得更加有效率。文/芒…

VMware创建Linux及局域网内独立访问IP和访问外网IP的配置

好早之前有一篇是配置远程连接Linux和部署Tomcat的文章&#xff0c;但是并没有讲解如何配置IP的相关知识。最近公司在搞集群配置&#xff0c;我就先拿电脑上的VMware上的Linux做个测试&#xff0c;分享和总结一下经验吧&#xff0c;也算是为了补齐之前的那个空白&#xff01; …

C#浅拷贝与深拷贝区别

也许会有人这样解释C# 中浅拷贝与深拷贝区别&#xff1a; 浅拷贝是对引用类型拷贝地址&#xff0c;对值类型直接进行拷贝。 不能说它完全错误&#xff0c;但至少还不够严谨。比如&#xff1a;string 类型咋说&#xff1f; 其实&#xff0c;我们可以通过实践来寻找答案。 首先&a…

内网安装nginx+keepalived环境配置及简单使用

分享一下这次艰难的配置过程&#xff0c;衔接上一篇的配置内网独立IP虚拟机。 先吐槽一波&#xff0c;由于公司网络属于内网&#xff0c;与外网互不相通&#xff0c;所以在安装nginx的时候可能会去外网找相对应rpm文件&#xff0c;而且也有许多的版本不兼容问题&#xff0c;好…