• 继承


    1.如何通过原型链实现继承?

    基本思想:让一个引用类型继承另一个引用类型的属性和方法。
    回顾:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。

    注意:不能使用对象字面量创建原型方法。

     2.原型链的问题?

    问题一:原型的实例属性会变成原型属性。

    问题二:创建子类型的实例时,不能向超类型的构造函数中传递参数。

    3.借用构造函数?

    基本思想:在子类型构造函数的内部调用超类型构造函数。

    回顾:构造函数就是初始化一个实例对象,对象的prototype属性是继承一个实例对象。

    function Person( name){
            this.name =name;
          }
    var p1=new Person('John');
    View Code

    优势:可以在子类型构造函数中向超类型构造函数中传递参数

    function SuperType(name){
        this.name = name;
    }
    
    function SubType(){
      //继承,传递参数 SuperType.call(
    this,"Nicholas");

      //实例属性
    this.age = 29; } var instance = new SubType(); alert(instance.name); alert(instance.age);

    问题:不可以函数复用

    另外:call()函数:

     add.call(sub,3,1);  
    这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

    4.组合继承?

    既可以让两个不同观点SubType实例分别拥有自己的属性,又可以使用相同的方法。

    function SuperType(name){
        this.name = name;
        this.colors=["red","blue","green"];
    }
    
    SuperType.prototype.sayName = function(){
        alert(this.name);
    };
    
    function SubType(name,age){
        SuperType.call(this,name);//继承
    
        this.age = age;
    }
    
    SubType.prototype = new SuperType();
    SubType.prototype.constructor=SubType;
    SubType.prototype.SayAge = function(){
        alert(this.age);
    };
    
    var instance1 = new SubType("Nicholas",29);
    instance1.colors.push("black");
    alert(instance1.colors);
    instance1.sayName();
    instance1.SayAge();
    
    var instance2 = new SubType("Greg",23);
    alert(instance2.colors);
    instance2.sayName();
    instance2.SayAge();

     5.原型式继承

    基本思路:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。

    var person={
        name:"Nicholas",
        friends:["shelby","court","van"]
    };
    
    //继承
    var anotherPerson = Object.create(person,{
        name:{value:"Greg"}//继承属性
    })
    
    alert(anotherPerson.name);

    有一个公式一般的函数:

  • 相关阅读:
    Unity文件操作路径
    自定义协议封装包头、包体
    完全卸载删除gitlab
    shell脚本报错:syntax error: unexpected end of file
    Shell脚本创建的文件夹末尾有两个问号怎么回事?
    您与此网站之间建立的连接并非完全安全
    linux 查看磁盘文件大小
    mysql连接问题
    Linux查看当前开放的端口
    本地Linux备份服务器[Client]定期备份云服务器[Server]上的文件(下)
  • 原文地址:https://www.cnblogs.com/n2meetu/p/6752206.html
Copyright © 2020-2023  润新知