• 总结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使用的就是深拷贝~

  • 相关阅读:
    C#的委托
    解决.net core3.1使用docker部署在Ubuntu上连接sqlserver报error:35的问题
    【WPF学习】第三十六章 样式基础
    asp.net core 3.x 身份验证-3cookie身份验证原理
    C#设计模式学习笔记:(9)组合模式
    Asp.net Core MVC(三)UseMvc设置路由
    C#后台异步消息队列实现
    ASP.NET CORE 内置的IOC解读及使用
    VS2015发布WEB项目
    C#的冒泡排序
  • 原文地址:https://www.cnblogs.com/goesby/p/4925037.html
Copyright © 2020-2023  润新知