js继承

js继承

一、总结

1、js继承:和c++,java不一样,是通过对象冒充, 原型链,混合模式来实现的

2、基础打牢:基础打牢,后面就很轻松

 

二、js继承

继承继承的相关概念

  • 这里的继承和我们现实生活的中儿子继承父亲财产的这种关系虽然有相似的地方,但本质其实不一样;
  • 举一个简单的例子理解继承的含义:
    • 猴子--会法术的猴子--孙悟空;
    • 会法术的猴子和猴子是我们这里所说的继承关系;
    • 会法术的猴子是猴子的一种,即猴子是会法术的猴子的类型;
    • 孙悟空是会法术的猴子的一个实例,即会法术的猴子是孙悟空的类;
    • 孙悟空即使会法术的猴子的一种,也是猴子的一种,这种关系就和我们接下来要讲的继承是一个道理;
    • 在程序里我们将猴子叫做父类(超类,基类),会法术的猴子是他的子类(子类型,派生类),会法术的猴子继承了猴子的所有特征;
    • 会法术的猴子是孙悟空的类;孙悟空是会法术的猴子的实例;
  • 一旦确定了两个类的继承关系,就包含以以三个意思:
    1. 子类的实例可以共享父类的方法
    2. 子类可以覆盖或扩展父类的方法
    3. 子类和父类都是子类实例的类型



继承的实现

实现继承的方式不止一种。这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的。所以大家看参考书的时候会发现很多种实现继承的方式,这里我们介绍最常用的几种。

    1. 对象冒充(构造函数绑定):

      原理如下:使用对象冒充(call或apply方法)(实质上是改变了this指针的指向继承基类

    2. 原型链

      这种方法更常见,使用prototype属性。

      • prototype 对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype 对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制。
      • 原型链的弊端是不支持多重继承。记住,原型链会用另一类型的对象重写类的 prototype 属性。
      • 子类的所有属性和方法都必须出现在 prototype 属性被赋值后,因为在它之前赋值的所有方法都会被删除。因为 prototype 属性被替换成了新对象,添加了新方法的原始对象将被销毁。
    3. 混合方式

      我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。

 

三、代码

2-10

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4   <meta charset="utf-8">
 5   <title>课堂演示</title>
 6 </head>
 7 <body>
 8   <script>
 9   /*
10     function Monkey(_type,_home){
11       this.type=_type;
12       this.home=_home;
13       this.say= function() {
14         alert('我是快乐的小猴子,家住'+this.home)
15       };
16     }
17 
18     function Hero(_HP){
19       this.HP=_HP;
20     }
21 
22     function Magic_monkey(_type,_home,arr,_HP){
23       //Monkey.call(this,_type,_home)
24       Monkey.apply(this,[_type,_home])
25       Hero.call(this,_HP)
26       this.skill=arr;
27     }
28     var wukong=new Magic_monkey('猴子','花果山',['七十二变','筋斗云'],1000)
29     // alert(wukong.home);
30     // alert(wukong.type);
31     // alert(wukong.skill);
32     alert(wukong.HP);
33     wukong.say();
34     */
35     //原型链继承
36     function Monkey(){}
37     Monkey.prototype.type='猴子';
38     Monkey.prototype.say=function(){alert('我是快乐的猴子')}
39 
40     function Magicmonkey(){}
41     //将Magicmonkey的prototype对象指向一个Monkey的实例。
42     //相当于删除了prototype 对象原先的值,然后赋予一个新值。
43     //不能继承多个类,后边的会覆盖前边的
44     Magicmonkey.prototype=new Monkey();
45     Magicmonkey.prototype.skill='法术';
46     var sunWukong=new Magicmonkey()
47     alert(sunWukong.type)
48     sunWukong.say()
49     alert(sunWukong.skill)
50 
51   </script>
52 </body>
53 </html>

1、对象冒充实现js继承:支持多重继承:具体实现: Monkey.call(this,_type,_home)

2、原型链实现js接触:不支持js:具体实现:Magicmonkey.prototype=new Monkey();

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/8997003.html

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

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

相关文章

Linux console on LCD

有时候需要将开机启动的信息输出到LCD上&#xff0c;并且在终端上进行调试。本文记录更改的方法。 参考链接 http://blog.csdn.net/chenbang110/article/details/7870072 https://e2e.ti.com/support/embedded/linux/f/354/t/324198 https://blackfin.uclinux.org/doku.php?id…

vscode 头文件包含问题_WSL+VSCode = Linux ?

官方文档​code.visualstudio.com使用VSCode新推出的Remote功能来连接WSL或服务器进行开发. 可以在Windows上享受优秀的界面体验的同时使用Linux环境进行开发(还是要感谢无数的VSCode插件贡献者).环境基础配置Visual Studio Code最新版本注意点: 安装时需要勾选环境变量添加到p…

PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏

一&#xff1a;背景 C# 程序内存泄漏的诱发因素有很多&#xff0c;但从顶层原理上来说&#xff0c;就是该销毁的 用户根 对象没有被销毁&#xff0c;从而导致内存中意料之外的对象无限堆积&#xff0c;导致内存暴涨&#xff0c;最终崩溃&#xff0c;这其中的一个用户根就是 终结…

【JS第34期】BOM-window对象

BOM的核心对象是window,它表示浏览器的一个实例。它即是通过javascript访问浏览器窗口的一个接口&#xff0c;也是ECMAScript规定的Global对象。 全局作用域 由于window对象同时是Global对象&#xff0c;因此所有在全局作用域中声明的变量、函数会变成window对象的属性和方法。…

proc文件(OLD)

写一个模块测试proc文件的读写&#xff1a; 1 #include linux/module.h 2 #include linux/kernel.h 3 #include linux/proc_fs.h 4 #include linux/sched.h 5 #include asm/uaccess.h 6 7 #define STRINGLEN 1024 8 9 char global_buffer[STRINGLEN]; 10 11 struct…

java学习(七)java中抽象类及 接口

抽象类的特点&#xff1a; A&#xff1a;抽象类和抽象方法必须用abstract关键字修饰。 B:抽象类中不一定有抽象方法&#xff0c;但是抽象方法的类必须定义为抽象类 c: 抽象类不能被实例化&#xff0c;因为它不是具体的。 抽象类有构造方法&#xff0c;但不能被实例化&#xff1…

手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考

为了方便手机操作&#xff0c;一些小伙伴会在手机桌面上添加天气、一键锁屏、日历等窗口小工具&#xff0c;那么问题来了&#xff01;荣耀9X这款新手机是如何添加窗口小工具呢&#xff1f;官维君今天就来给大家讲解一下方法。标准姿势看这里——第一步&#xff1a;在桌面双指头…

ASP.NET Core 同时支持多种认证方式 | Swagger 支持

前言上次&#xff0c;我们实现了《ASP.NET Core 同时支持多种认证方式》&#xff1a;services.AddAuthentication().AddDemoAuthentication(options > { }).AddJwtBearer(options >{...});我们还希望为 Swagger 也添加多种认证支持。原来为支持 JWT 认证&#xff0c;Swag…

js监听url变化

//监听触发操作 function hashChangeFire(){alert("k") }//url变化监听器 if( (onhashchange in window) && ((typeof document.documentModeundefined) || document.documentMode8)) {// 浏览器支持onhashchange事件window.onhashchange hashChangeFire; …

Redis指南

一、简介 redis 和 memcached 都是高性能的键值缓存数据库服务&#xff0c;其中 memcached 支持多线程&#xff0c;而 redis 支持丰富的数据结构且能内置持久化机制。 redis 数据都是以键值形式存储的&#xff0c;键是字符串类型&#xff0c;值有 7 种类型&#xff08;本质上是…

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

python3怎样交换数字顺序_python中怎么交换列的顺序

DataFrame的列有时我们需要对添加的列或原来的列进行交换顺序。data pd.DataFrame(np.arange(16).reshape(4,4),columnslist(abcd))In [88]: dataOut[88]:a b c d0 0 1 2 31 4 5 6 72 8 9 10 113 12 13 14 15一&#xff1a;获取DataFrame列标签cols list(data)In [94]: colsO…

【实战】手把手教你从 0 到 1 搭建一套 RocketMQ 集群

大家好&#xff0c;我是君哥。今天来分享怎样搭建 RocketMQ 集群。本文搭建集群使用的环境是 2 个云主机&#xff0c;架构如下&#xff1a;在 47.xx.xx.xx 和 39.xx.xx.xx 上分别部署一个 Name Server 和 Broker 主节点&#xff0c;这里不搭建从节点。也就是官网介绍的 2m-nosl…

使用SMART监控Ubuntu

参考&#xff1a;完全用 GNU/Linux 工作 - 29. 檢測硬碟 S.M.A.R.T. 健康狀態 1.安装 sudo apt-get install smartmontools2.查看硬盘的参数&#xff0c;需要获得Root权限 sudo smartctl -i /dev/sdasmartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-122-generic] (local bu…

Shell中各种判断语法

Shell判断 按照文件类型进行判断 -b 判断文件是否存在&#xff0c;并且是否为快设备文件&#xff08;是块设备文件为真&#xff09; -c 判断文件是否存在&#xff0c;并且是否为字符设备文件&#xff08;是字符设备文件为真&#xff09; -d 判断文件是否存在&#xff0c;并且是…

敏捷制造:并不是你想像的矛盾体

\关键点\敏捷制造使企业能够比传统制造方式更快更有效地取悦客户 \敏捷方法实际上是为制造而不是软件而开发的 \敏捷制造需要从上到下的数字视角和承诺 \敏捷制造需要新的技能&#xff0c;还需要授权、扁平化合作和贯穿整个组织的沟通 \迈向敏捷制造的第一步可以是通过升级传统…

c#队列取值_在队列的开头获取对象– C#中的窥视操作

要在队列的开始处获取对象&#xff0c;代码如下-示例using System;using System.Collections.Generic;public class Demo {public static void Main() {Queue queue new Queue();queue.Enqueue("A");queue.Enqueue("B");queue.Enqueue("C");que…

上海一趟,我陷入了沉思

hi&#xff0c;这里是桑小榆。2022年8月20日&#xff0c;我去了一趟上海&#xff0c;交了很多新朋友&#xff0c;和各行业且具备独立思考的伙伴交流了很多&#xff0c;也吸收了很多的新东西。此篇我将分享我的感悟&#xff0c;并以自己的角度剖析存在的问题。痛苦与症状在此之前…

廖雪峰 练习 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字...

# -*- coding: utf-8 -*- #输入名字&#xff0c;变成首字母大写&#xff0c;其他字母小写的标准格式 def normalize(name):str1 for i, ch in enumerate(name):if i 0:str1 str1 ch.upper() #str.upper() 方法让字母转大写else:str1 str1 ch.lower() #str.lower()…

Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件

为什么80%的码农都做不了架构师&#xff1f;>>> Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件 http://www.swiper.com.cn/ 转载于:https://my.oschina.net/huqiji/blog/800482