zoukankan      html  css  js  c++  java
  • js实现继承的方法

    1.对象冒充

    function Parent(username){
    
      this.username=username;
    
      this.hello=function(){
    
        console.log(this.username);
    
      }
    
    }
    
    /*
         1.用this.method作为临时属性,指向parent对象
         2.执行this.method方法,执行Parent指的对象属性
         3.销毁this.method属性,此时的child已经有了parent的属性和方法
     */
    
    function Child(username,passsword){
    
      this.method=Parent;
    
      this.method(username);
    
      delete this.method;
    
      this.password=password;
    
      this.word=function(){
    
        console.log(this.password)
    
      }
    
    }
    
    var parent=new Parent("abc");
    
    var child=new Child("123","123");
    
     
    
    parent.hello();
    
    child.hello();
    
    child.word();
    

     2.call()方法实现继承

    call方法是Function类中的方法
    call方法的第一个参数的值赋值给类(即方法)中出现的this
    call方法的第二个参数开始依次赋值给类(即方法)所接受的参数

      function test(str){
    
      console.log(this.name+" "+str);
    
    }
    
    var obj=new Object();
    
      obj.name="doctor";
    
    test.call(obj,'我是传入的str');
    
    
    function Parent2(username){
    
      this.username=username;
    
      this.hello=function(){
    
        console.log(this.username);
    
      }
    
    }
    
    
    function Child2(username,password){
    
    
      Parent2.call(this,username);
    
      this.password=password;
        
      this.word=function(){
    
        console.log(this.password);
    
        }
    
    }
    
    var parent2=new Parent("p1");
    
    var child2=new Child2("C2","cpwd");
    
    
    parent2.hello();
    
    child2.hello();
    
    child2.word();
    

     3.apply()方法

    apply方法接受2个参数,
    A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this
    B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数

        function Parent3(username){
            this.username=username;
            this.hello=function(){
                console.log(this.username);
            }
        }
    
        function Child3(username,password){
            /*
                调用Parent的方法
             */
            Parent3.apply(this,new Array(username));
            this.password=password;
            this.word=function(){
                console.log(this.password);
            }
        }
    
        var parent3=new Parent3('abc');
        var child3=new Child3('def','123');
    
        parent3.hello();
        child3.hello();
        child3.word();
    

     4.原型链法

        function Person(){
    
        }
        Person.prototype.hello="hello";
        Person.prototype.sayHello=function(){
            console.log(this.hello);
        }
    
        function Kid(){
    
        }
        Kid.prototype=new Person();
        Kid.prototype.world="world";
        Kid.prototype.sayWord=function(){
            console.log(this.world);
        }
        var c=new Kid();
    
        c.sayHello();
    
        c.sayWord();
    

     5.混合方式

        function Parent(hello){
            this.hello=hello;
        }
        Parent.prototype.sayHello=function(){
            console.log(this.hello);
        }
    
        function Child(hello,word){
            Parent.call(this,hello);//将父类的属性继承过来
            this.word=word;
        }
        Child.prototype=new Parent();//将父类的方法继承过来
        Child.prototype.sayWord=function(){
            console.log(this.word);
        }
        var c=new Child("123","456");
        c.sayWord();
        c.sayHello();
    
  • 相关阅读:
    【校招面试 之 C/C++】第23题 C++ STL(五)之Set
    Cannot create an instance of OLE DB provider “OraOLEDB.Oracle” for linked server "xxxxxxx".
    Redhat Linux安装JDK 1.7
    ORA-10635: Invalid segment or tablespace type
    Symantec Backup Exec 2012 Agent for Linux 卸载
    Symantec Backup Exec 2012 Agent For Linux安装
    You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
    YourSQLDba介绍
    PL/SQL重新编译包无反应
    MS SQL 监控数据/日志文件增长
  • 原文地址:https://www.cnblogs.com/anxiaoyu/p/6526653.html
Copyright © 2011-2022 走看看