• js 继承inheritance/extends


    主要就是《javascript语言精粹》语言精粹中的内容

    5.1伪类

    Function.prototype.method = function(name,func){ this.prototype[name] = func; return this; }

    var
    Cat = function(name){ this.name = name; this.saying = "meow"; } Cat.prototype = new Mammal(); Cat.prototype.purr = function(n){ var i,s = ""; for(i = 0 ; i < n ; i+=1){ if(s){ s += "-"; } s += "r"; } return s; } Cat.prototype.get_name = function(){ return this.says() + " " + this.name + " " + this.says(); }
    var myCat = new Cat("bubu");
    var says = myCat.says();
    var purr = myCat.purr(5);
    var name = myCat.get_name();
    
    console.log(says , purr , name);
     

    伪类模式本意是想向面向对象靠拢,我们可以隐藏一些丑陋的细节,这是通过使用method方法定义一个inherits方法来实现的

    Function.prototype.method = function(name,func){
        this.prototype[name] = func;
        return this;
    }
    
    Function.method('inherits',function(Parent){
        this.prototype = new Parent();
        return this;
    })
    
    var Cat = function(name){
        this.name = name;
        this.saying = "meow";
    }.
        inherits(Mammal).
            method("purr",function(n){
            var i,s = "";
            for(i = 0 ; i < n ; i+=1){
                if(s){
                    s += "-";
                }
                s += "r";
            }
            return s;
        }).
            method("get_name",function(){
                return this.says() + " " + this.name + " " + this.says();
            });
    
    var myCat = new Cat("bubu");
    var says = myCat.says();
    var purr = myCat.purr(5);
    var name = myCat.get_name();
    
    console.log(says , purr , name);

    我们现在有了行为像“类”的构造器函数,但是他们可能有着令人惊讶的行为:没有私有环境;所谓的属性都是公开的。无法访问super(父类)的方法

    更糟的是,使用构造器函数存在一个严重的危害。如果你在调用构造器函数时忘记在前面加上new 前缀,那么this将不会绑定到一个新对象上。更可悲的是,this将绑定到全局对象上,所以不精没有扩充新对象,反而将破坏全局变量

    伪类给不熟悉js的程序员提供了便利,但是它也隐藏了该语言的真实本质。许多复杂的类层次结构产生的原因是静态类型检查的约束。js完全摆脱了那些约束。在基于类的语言中,类的继承是代码重用的唯一方式。js有更好的选择。

  • 相关阅读:
    数据结构(一)线性表单链表试题
    虚拟研讨会:如何设计好的RESTful API?
    如何生成RestFul Api文档
    webstorm 10 设置文件的默认编码
    HAML学习
    Nodejs初阶之express
    RESTful API 简书
    解读Nodejs多核处理模块cluster
    Nginx做NodeJS应用负载均衡配置实例
    拿nodejs快速搭建简单Oauth认证和restful API server攻略
  • 原文地址:https://www.cnblogs.com/della/p/3622527.html
Copyright © 2020-2023  润新知