js继承问题

JavaScript 继承问题

继承的发展史

  1. 传统形式 ----> 原型链

    1. 继承了父級的所有的属性(原型链上的也会继承)过多的继承了没有用的属性,代码冗余,执行效率低下
    2. 子級无法向父級进行传参
    3. 如果要给之級通过原型来添加属性和方法,那么必须在之級继承父級之后 Detail.prototype = new Star() ,才能进行新增。
    4. 无法实现多继承,js本身没有多继承机制,但是可以进行代码模拟多继承。

      function Star () {
      this.person = function(){
      console.log("金城武");
      }
      this.country = function(){
      console.log("台湾")
      }
      this.msg = "this is Star"
      }

      function Detail(){this.msg = "this is Detail"
      }Detail.prototype = new Star();
      var detail = new Detail();
      detail.person();    
      console.log(detail.msg); //this i Detail 
      console.log(detail.constructor); //f Star(){······}
      console.log( detail instanceof Detail);//true
      console.log( detail instanceof Star);//true
  2. 借用构造函数(call/apply)

    1. 不能继承借用构造函数的原型链上的属性和方法
    2. 每次构造函数都要多走一次函数(执行效率低下)
    3. 可以实现多继承
    4. 问题:如果单独写Basic.call(this);那么子級是继承到父級中的属性,但是可以继承其中的方法,不知道,测试一下会输出,(undefined undefined "female"); 但是per.dispaly();per.dispaly2();都能被输出,不知道为什么!!! 难道是this这个指针指向的是父級中所有的方法,如果之級要使用父級的属性,还要单独,使用call吗?可以在子級构造的时候选择要从父級继承的方法吗?

    function Basic(name,age){
    this.name = name;
    this.age = age;
    this.dispaly = function(){
    console.log(" this is dispaly from Basic");
    }
    this.dispaly2 = function(){
    console.log(" hello world");
    }
    }
    function Gender(gender){
    this.gender = gender;
    }
    // Basic.prototype.dispaly2 = function(){
    // console.log(" 我的原型链上的东西");
    // }
    function Person(name, age, gender){
    Basic.call(this,name,age);
    Gender.call(this,gender);
    this.show = function(){
    console.log(this.name,this.age,this.gender);
    }
    }

         var per = new Person("jack", 99, "female");per.show();per.dispaly();per.dispaly2();
  3. 共享原型

    不能随便改变自己的原型,一但修改全部改,之級改变原型那么父級也将随之改变。

     function Father(){}Father.prototype.lastName = "Sun";function Son(){ }var father= new Father();Son.prototype = Father.prototype;var son = new Son();console.log(son.lastName); //SunSon.prototype.lastName = " Wang";console.log(son.lastName); //Wangconsole.log(father.lastName);//Wang
  4. 圣杯模式

    可以防止原型链上的修改影响到父級。因为有了一个中间对象F出现,所以Target在原型上所作的修改,只会影响F上的属性,真正的父級不会产生影响,但是查找的话是沿着原型链_proto_查找的,可以找到父級,实现继承。

    //第一种
    var inherit = (function(){
    var F = function(){};
    return function(Target, Origin){
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = Target;
    Target.prototype.uber = Origin.prototype;
    }
    }())

    //第二种
    function inherit (Target, Orgin){
    var F = function(){}; //生成一个中间对象,
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = Target;
    Target.prototype.uber = Origin.prototype;
    }

转载于:https://www.cnblogs.com/lakemonster/p/9744871.html

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

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

相关文章

怎么把jad反编译放到Eclipse中

可以在CSDN下载页上进行下载哦,免费的哦,不要积分。 http://download.csdn.net/detail/farxix/9838195 我们把下载下来的jad资源包解压出来,如下图: 首先: 然后: 打开eclipse进行设置&#xff0…

一些很有意思的JS现象

关于JS对象的 . 和 [] []除了属性名可以比 .天马行空以外(比如我们要添加一个为33-abc的属性,一定得用[])),还有一个实际操作中的区别 Object.is的作用和两个奇特的现象 还记得isNaN的作用,但有时候我们就想直接比较两个数据,总不…

怎么查看eclipse的版本号

在电脑上找到你安装eclipse的路径,找到readme点击打开,如下图所示: 查看版本号:

asp.net Page.Controls对象(找到所有服务器控件)

前台 复制代码 代码如下:<% Page Language"C#" AutoEventWireup"true" CodeFile"Default.aspx.cs" Inherits"_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3…

Vue2.0 脚手架代码详解

参考作者&#xff1a;https://www.jianshu.com/p/2b661d01eaf8 只是为了方便个人学习。 来看一下脚手架创建后的项目目录 说明&#xff1a;在*.vue文件&#xff0c;template标签里写html代码&#xff0c;且template直接子级只能有一个标签。style标签里写样式&#xff0c;scrip…

如何使用多个端口访问tomcat

查端口号是否被占用 在cmd中使用 netstat -ano 命令&#xff1b; 处理端口号使用命令 taskkill /pid 1234 ( 8080指的是端口号对应的PID 号 ) 在使用tomcat服务器做为开发使用时&#xff0c;如果我们有多个项目要发布、启动时怎么办呢&#xff0c;在一个tomcat下添加多个项目…

设计模式总纲

根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software&#xff08;中文译名&#xff1a;设计模式 - 可复用的面向对象软件元素&#xff09; 中所提到的&#xff0c;总共有 23 种设计模式。这些模式可以分为三大类&#xff1a;创建型模式&…

indexOf、lastIndexOf、substring等详解

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。注意&#xff1a;这个方法返回的是出现的位置&#xff0c;是从0开始检索&#xff01; 例如&#xff1a; hello是父字符串&#xff0c;ello是需要在父字符串中进行检索的子字符串&#xff0c;1是开始检索的位…

编码是件有逻辑的事情

勤劳是最基本的&#xff0c;所能做的就是花更多的时间在上面。 就算最后不能成功&#xff0c;尽力就好。 First . 充分清楚需求改造内容&#xff0c;具体到 哪个字段、逻辑处理等。 这是编码的核心&#xff0c;清楚了需求才能进行编码&#xff0c;也决定了你编码后续的测试情况…

win10 安装mysql 8.0.12

按照CSDN以及博客园的其他教程, 之前安装过几次都有或多或少的bug 主要安装步骤: 1.配置my.ini文件 2.管理员进入终端, 切换到.../bin目录下进行操作 3.指令操作: 1) mysqld --initialize --console              此指令正常情况下, 可以自动生成一项随机密码, 一…

6 月

事情很多&#xff0c;需一件一件去做&#xff0c;不急不躁。 天气飘忽不定&#xff0c;不带伞时就下雨&#xff0c;带伞时偏不下雨&#xff0c;猜不透少女心。 没有去看书&#xff0c;很快又过去一月&#xff0c;一年也很快。 打了场篮球&#xff0c;锻炼还需勤快。 遇到问…

pmd 设置默认规则,只要使用了该规则集就自动使用

pmd规则集是在rulesets的对应xml里. 之前研究pmd的时候,发现如果配置规则时使用<rule ref"rulesets/java/...xml">形式的话,该规则就怎么样都会被使用. 即便命令行参数传入的要求只调用该规则集xml里的某一个规则. 现在反过来,如果想使用某个规则集的时候,某一…

查看端口占用情况

当tomcat被占用时&#xff0c;可以使用命令行来解决占用问题&#xff1b; 打开cmd 输入netstat -ano|findstr 7001 即可找到相应的pid号 7016 再使用taskkill /f /pid 7016 就可以去除占用端口号情况。

Delphi---TServerSocket和TClientSocket发送和接收大数据包

https://www.cnblogs.com/zhangzhifeng/p/6065244.html TServerSocket和TClientSocket用非阻塞模式发送和接收比较大的数据时&#xff0c;可能一次会接收不完&#xff0c;此时需要通过循环接收。 //接收 procedure TMAINFORM.TCPServer1ClientRead(Sender: TObject;Socket: TCu…

表连接的详解

表A &#xff1a; ID NAME 1 , kobe 2 , pual 3 , tim 表B &#xff1a; ID NAME 1 , kobe 2 , pual 5 , michal 内连接&#xff1a;两表相交叉的部分 select a.ID,a.NAME,b.ID,b.NAME from A a inner join B b on a.IDb.ID; 结果为&#xff1a;1 , kobe2 , pual1 , kobe2 ,…

译:1. RabbitMQ Java Client 之 Hello World

这些教程介绍了使用RabbitMQ创建消息传递应用程序的基础知识。您需要安装RabbitMQ服务器才能完成教程 1. 打造第一个Hello World 程序 RabbitMQ是一个消息代理&#xff1a;它接受和转发消息。你可以把它想象成一个邮局&#xff1a;当你把你想要发布的邮件放在邮箱里时&#xff…

weblogic问题: Unable to resolve 'jdbc.mydb'. Resolved 'jdbc'; remaining name '

现这个是由于没有找到JNDI 解决方法&#xff1a; 在Weblogic数据源管理中的JDBC Data Source-0的设置中设置目标选项 将服务勾选上&#xff0c;如默认的&#xff1a;AdminServer 保存后即可&#xff1b;

org.xml.sax.SAXParseException: The string -- is not permitted within comments.

当我报这个错的时候&#xff0c;我时这样解决的&#xff1a; 在主目录的bin\startWebLogic.cmd中添加 set JAVA_OPTIONS-Dfile.encodingUTF-8

数据库系列之关键字

http://www.w3school.com.cn/sql/sql_distinct.asp sql_distinct转载于:https://www.cnblogs.com/PrestonL/p/9767110.html

Build path -No action available/classpath .project

从SVN download 下来的项目&#xff0c;发现的.Java 文件和平时的不一样&#xff0c;并且想加入jar 进去的时候没有Java Build Path 的选项&#xff0c;无法链接类的源码&#xff0c;项目也无法发布,这里记录分享&#xff1a; 原因是&#xff0c;在项目里面找到.project &…