• js常见知识点3.面向对象之继承、设计模式


    一、面向对象的三大特征

      建议回复: 
      封装:屏蔽内部细节、调用外部接口实现对应功能(函数调用)
      继承:子类继承父类中的属性和方法
      多态(js中不存在多态的概念)

    二、继承

      建议回复:  
      继承:子类继承父类中的属性和方法 , 这些属性和方法在子类中不需要实现过程
      继承的种类:
           单继承:一个子类只拥有一个父类
           多继承:一个子类可以拥有多个父类

    三、继承的方式及实现过程

      建议回复:
      1.继承方式一、通过改变构造函数(父类)的执行环境 ---在子类中添加一个特殊属性,这个属性值指向父类。
    <script>
        function Father(){
            this.money="1个亿";
            this.eat=function(){
                console.log("eat meat!");
            }
            this.drink=function(){
                console.log("drink wine!");
            }
        }
        function Son(){
            this.parent=Father;//为子类添加一个特有的属性 改变父类的执行环境
            this.parent();//改变了执行环境
            
            delete this.parent;//继承完父类属性方法之后就可以把这个属性删了,注意:delete只能删除实例属性
        }
        var son=new Son();
        console.log(son.money);
        console.log(son.parent);
    </script>

     

      2.继承方式二、通过call方法实现。  

        call方法使用:
             父类.call(子类[,子类继承父类的属性]); 
    <script>
        function Father(firstname){
            this.firstname=firstname;
            this.money=200000000;
            this.drink=function(){
                console.log("drink coffe");
            }
            this.dance=function(){
                console.log("dancer is not dance");
            }
        }
        function Father2(){
            this.money2=300000000;
        }
        function Son(firstname,score){
            this.score=score;
            Father.call(this,firstname);
            Father2.call(this);
        }
        var son=new Son("dancer",90);
        console.log(son);
    </script>

     

      3.继承方式三、通过apply继承.    

        apply使用方法:
             父类.apply(子类对象,数组)  数组中存储的是从父类继承过来的属性 
    <script>
      function xiaomi5(price,size,memsize){ this.price = price; this.size = size; this.memsize = memsize; this.phoneCall = function(){ console.log("打电话"); } this.sendMessage = function(){ console.log("发短信"); } } function xiaomi5Plus(price,size,memsize,color){ this.color = color;//特有属性 //xiaomi5.apply(this,[price,size,memsize]); xiaomi5.apply(this,arguments);//通过arguments接收 this.playMusic = function(){ return "播放音乐"; } this.photo = function(){ console.log("照相"); } } var xm = new xiaomi5Plus(789,7,64,"white"); console.log(xm);

    </script>

      4.继承方式四、原型继承.

        缺点:原型继承 继承实例属性时, 子类的属性值和父类相同

         function Father(age){
              this.age = age;
              this.money = 2000000;
              this.drink = function(){
                  console.log("喝酒");
              }
         }
         Father.prototype.liaomei = function(){
              console.log("撩妹");
         }
         function Son(){
    
         }
    
         Son.prototype = new Father(38);//原型继承
    
         var son = new Son();
         //son.liaomei();
    
         alert( son.age );

      5.继承方式五、混合继承.    

        通过apply或call继承实例属性
        通过原型方式 继承 原型方法
      
        function Father(money,firstname){
              this.money = money;
              this.firstname = firstname;
         }
    
         Father.prototype.dance = function(){
              console.log("跳舞");
         }
         Father.prototype.sleep= function(){
              console.log("睡觉");
         }
    
         function Son(money,firstname){
              Father.call(this,money,firstname);
         }
    
         //原型继承
         Son.prototype = new Father();
    
         var son = new Son("200000","王");
         son.dance();

     

    四、原型对象   prototype

      建议回复:  
      每一个构造函数都有一个prototype属性     实现:  构造函数.prototype
      每一个构造函数new出来的对象都有一个prototype属性     实现 :  对象.__proto__        指向的是prototype 
      

    五、原型模式的执行流程

      建议回复:  
      1、先查找实例属性和实例方法,如果有实例属性或实例方法,就返回 该实例属性或实例方法的结果
      2、如果没有实例属性或实例方法,就去原型中查找,如果有原型属性或原型方法,就返回,如果没有,返回undefined

    六、原型中的几个关键字(扩展)

      建议回复: 
      1.测试某个对象是否属于某个类的方法 isPrototypeOf()
        语法: 构造函数.prototype.isPrototypeOf(对象):判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试               结果为boolean类型  同  instanceof 
         如:
        var arr = [];
        alert( arr instanceof Array )
     
      2.delete :删除实例属性
        语法 :  delete  对象.实例属性
     
      3.hasOwnProperty() 判断某一个对象是否包含该实例属性, 包含返回true,否则返回false   
        语法: 实例对象.hasOwnProperty("实例属性")
     
      4.in 是否存在该属性(原型或实例中)
        语法: "属性" in  对象实例

    七、设计模式的概念及几种常见的设计模式

      建议回复:  
      1、什么是设计模式?    
        设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、  让代码更容易被他人理解、保证代码可靠性。
     
      2.设计模式之单例模式
    我一路向北,离开有你的季节...
  • 相关阅读:
    在Windows环境下搭建redis
    三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
    ASP.NET Web API身份验证和授权
    quartz 设置时间格式
    服务端发post请求产生的编码问题
    大型网站的灵魂——性能
    大型网站系统架构的演化
    c# url自动解码解决方案
    C# RSA非对称加密实现
    .net上传图片之使用第三方平台七牛上传图片接口
  • 原文地址:https://www.cnblogs.com/dancer0321/p/6833206.html
Copyright © 2020-2023  润新知