• 总结javascript继承的两种方式的N中写法


    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式。

    一、prototype方式

    当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个prototype属性,prototype包含一个constructor对象

    而constructor便是该新函数对象(constructor意义不大,但是可以帮我们找到继承关系)

    每个函数都会有一个prototype属性,该属性指向另一对象,这个对象包含可以由特定类型的所有实例共享的属性和方法

    每次实例化后,实例内部都会包含一个[[prototype]](__proto__)的内部属性,这个属性指向prototype

    (以上图片取自叶小钗博客)

    二、copy方式

    function extend(child,parent)//通过临时构造器继承
    {
        var f=function(){};
        f.prototype=parent.prototype;
        child.prototype=new f();
        child.prototype.constructor=child;
        child.uber=parent.prototype;//uber 类似其他语言里的SuperClass
    }
    
    
    function extend2(child,parent)//传递superclass
    {
        var c=child.prototype;
        var p=parent.prototype;
        for(var v in p)
        {
            c[v]=p[v];
        }
        child.uber=parent.prototype;
    }
    
    function extendcopy(parent)
    {
        var temp={};
        for(var t in parent)
        {
            temp[t]=parent[temp];
        }
        temp.uber=parent;
        return temp;
    }
    
    function deepcopy(child,parent)
    {
        var c=child||{};
        for(var t in parent)
        {
            if(typeof parent[t]==="object")
            {
                c[t]=(parent[t].constructor==="Array")?[]:{};
                deepcopy(c[t],parent[t]);
            }
            else
            {
                c[t]=parent[t];
            }
        }
        return c;
    }
    
    function objectextend(o)
    {
        function f(){};
        f.prototype=o;
        return new f();
    }
    function objectextend2(o)
    {
        function f(){};
        f.prototype=o;
        var n=new f();
        n.uber=o;
        return n;
    }
    
    
    function extendcopyplus(o,stuff)
    {
        function f(){};
        f.prototype=o;
        var n=new f();
        n.uber=o;
        for(var t in stuff)
        {
            n[t]=stuff[t];
        }
        return n;
    }

    至于哪种方式更好,完全取决于自己的意愿。

    jquery使用的就是深拷贝~

  • 相关阅读:
    Linux 命令集合
    vsftpd 创建虚拟用户
    Java Web Socket
    Linux 命令集合
    YII 1.0 上传文件
    YII 1.0 扩展第三方类
    YII 1.0 发表文章用到的小物件
    YII 1.0 增删改查
    mysql 日志
    YII 1.0 小功能总结
  • 原文地址:https://www.cnblogs.com/goesby/p/4925037.html
Copyright © 2020-2023  润新知