javascript 5种方式实现继承

//继承第一种方式:对象冒充

    function Parent(username){
        this.username = username;//this由指向Parent改为指向Child
        this.sayHello=function(){
            alert(this.username);
        }
    }

    function Child(username,password){
        //下面的3行代码是最关键的
        this.method = Parent;//指向函数的引用
        this.method(username);//调用构造函数
        delete this.method;

        //Parent(username) //wrong  syntax error
        //new Parent(username) //wrong  this keyword still points to Parent

        this.password = password;
        this.sayWord=function(){
            alert(this.password);
        }
    }

    var parent = new Parent("zhangsan");
    var child  = new Child('lisi','234');
    parent.sayHello();
    child.sayHello();
    child.sayWord();

    //继承第二种方式 call方法
    //call方法是Function对象中的方法,因此我们定义的每个函数都拥有该方法
    //可以通过函数名来调用call方法

    function Parent(username){
        this.username = username;//this由指向Parent改为指向Child
        this.sayHello=function(){
            alert(this.username);
        }
    }

    function Child(username,password){
        Parent.call(this,username);//
        this.password = password;
        this.sayWord=function(){
            alert(this.password);
        }
    }

    var parent = new Parent("zhangsan");
    var child  = new Child('lisi','234');
    parent.sayHello();
    child.sayHello();
    child.sayWord();
    

    //继承第三种方式 apply方法
    function Parent(username){
        this.username = username;//this由指向Parent改为指向Child
        this.sayHello=function(){
            alert(this.username);
        }
    }

    function Child(username,password){
        Parent.apply(this,new Array(username));//数组
        this.password = password;
        this.sayWord=function(){
            alert(this.password);
        }
    }

    var parent = new Parent("zhangsan123");
    var child  = new Child('lisi','234567');
    parent.sayHello();
    child.sayHello();
    child.sayWord();

    //继承第四种方式 原型链(prototype chain)
    //无法传递属性参数值
    function Parent(){

    }
    Parent.prototype.hello="hello";
    Parent.prototype.sayHello = function(){
        alert(this.hello);
    }

    function Child(){

    }

    Child.prototype = new Parent();
    Child.prototype.world="world";
    Child.prototype.sayWorld=function(){
        alert(this.world);
    }

    var parent = new Parent();
    parent.sayHello();
    var child = new Child();
    child.sayHello();
    child.sayWorld();

    //继承第五种方式 混合方式(最推荐)
    function Parent(hello){
        this.hello=hello;
    }
    Parent.prototype.sayHello=function(){
        alert(this.hello);
    }
    function Child(world){
        Parent.call(this,world);
        this.world = world;
    }
    Child.prototype = new Parent();
    Child.prototype.sayWorld=function(){
        alert(this.world);
    }
    var parent = new Parent("hello");
    parent.sayHello();
    var child = new Child("world");
    child.sayHello();
    child.sayWorld();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值