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.设计模式之单例模式
    我一路向北,离开有你的季节...
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号