zoukankan      html  css  js  c++  java
  • js对象的继承

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    <script>
    
    //继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
    
    //属性的继承 : 调用父类的构造函数 call
    
    //方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend)
    
    function CreatePerson(name,sex){   //父类
    	this.name = name;
    	this.sex = sex;
    }
    CreatePerson.prototype.showName = function(){
    	alert( this.name );
    };
    
    var p1 = new CreatePerson('小明','男');
    //p1.showName();
    
    
    function CreateStar(name,sex,job){  //子类
    	
    	CreatePerson.call(this,name,sex);
    	
    	this.job = job;
    	
    }
    
    //CreateStar.prototype = CreatePerson.prototype;
    
    extend( CreateStar.prototype , CreatePerson.prototype );
    
    CreateStar.prototype.showJob = function(){
    };
    
    var p2 = new CreateStar('黄晓明','男','演员');
    
    p2.showName();
    
    
    function extend(obj1,obj2){
    	for(var attr in obj2){
    		obj1[attr] = obj2[attr];
    	}
    }
    </script>
    </head>
    
    <body>
    </body>
    </html>
    

      如上面的代码(此代码是视频资料中,自己也有写过一遍...)

    js对象的继承要把属性和方法分开继承:

    属性的继承 : 调用父类的构造函数 call

    方法的继承 : for in : 拷贝继承 (jquery也是采用拷贝继承extend)

    属性的继承直接调用父类的构造函数即可

    Createperson(this,....);

    方法的继承需要用到for  in

    不能直接  子类.prototype = 父类.prototype 因为把父类的引用也传递给了子类.子类会影响父类

    其他继承方式

    1.类式继承 

    function Aaa(){}//父类

    function Bbb(){}//子类

    面试中可能会让我们用一句话来完成,Bbb.prototype = new Aaa();

    但是这样还存在很多问题,例如Bbb的constructor指向问题。

    正确做法应该是

    function Bbb(){ Aaa.call(this); }

    var F = function(){};
    F.prototype = Aaa.prototype;
    Bbb.prototype = new F();
    Bbb.prototype.constructor = Bbb; //修正指向问题

    2.原型继承,适用于非new创建的对象,

    var a = {
    name : '小明'
    };

    var b = cloneObj(a);

    b.name = '小强';

    alert( b.name );
    alert( a.name );

    function cloneObj(obj){

    var F = function(){};

    F.prototype = obj;

    return new F();

    }

  • 相关阅读:
    需要学习的技术
    面试资料
    数据库设计三大范式
    java List 排序 Collections.sort() 对 List 排序
    hibernate的延迟加载
    索引失效原因总结
    mybatis调用oracle存储过程
    Android开发中需要注意哪些坑
    Intent在Activity之间传值的几种方式
    Android动画(Animations)
  • 原文地址:https://www.cnblogs.com/toodeep/p/4472737.html
Copyright © 2011-2022 走看看