+发表新主题
查看: 2683|回复: 0

[代码片段] js 继承

[复制链接]

[代码片段] js 继承

[复制链接]
维尼茄子 发表于 2016-1-7 20:13:04 浏览:  2683 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
.继承:

     面向对象3大特点:封装 继承 多态

       封装:将相关的属性和方法,集中定义在一个对象中。

       多态:js仅变相支持重载。

       继承:父对象中定义的方法,子对象不用定义,可直接访问!

     继承:

      1. 一个对象,直接继承另一对象:

         Object.setPrototypeOf(子对象,父对象)

         相当于:子对象.__proto__=父对象

           何时使用:只修改一个对象的父对象是使用。



  • //一个对象直接继承另一个对象
  •      var father={car:"BMW",balance:10000000};
  •      var hmm=[];
  • var lilei=[];
  •      Object.setPrototypeOf(hmm,father);
  • console.log(hmm.car);
  • console.log(hmm.balance); console.log(lilei.car);

复制代码
200645rcexsnxxw3enp1pn.png

          2.修改构造函数的原型对象,统一修改之后创建的所有子对象的公共原型:

                                             构造函数.prototype=父对象

                                             必须在首次实例化对象之前修改!

        何时使用:批量修改未来所有子对象的父对象时,一旦子对象创建后,修改构造函数的原型,子对象无法继承新父对象


  • //修改构造函数原型对象
  •         function Student(sname,age){
  •      this.sname=sname;
  • this.age=age;
  • }
  •         Student.prototype.intrSelf=function(){
  • console.log("I'm "+this.sname+","+" I'm "+this.age);
  •                };
  • var father={car:"BMW"};
  • Student.prototype=father;
  •     var lilei=new Student("lilei",18);
  •         var hmm=new Student("hmm",19);
  • console.log(lilei.sname);
  •         console.log(lilei.age);
  • console.log(lilei.car);
  •         console.log(hmm.sname);
  •         console.log(hmm.age);console.log(hmm.car);

复制代码
200645rcexsnxxw3enp1pn.png


   如何判断一个对象是数组的几种方法:

          typeof无法区分数组和一般对象,不能用来识别数组!

      


  • //用typeof判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •      console.log(typeof arr); //判断失败
  • console.log(typeof obj); console.log(typeof fun);

复制代码
200645rcexsnxxw3enp1pn.png    

   

           1. Array.prototype.isPrototypeOf(obj)

               如果返回true,说明是数组,否则不是

   


  • //判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •      if(Array.prototype.isPrototypeOf(arr)){
  •        console.log("arr是数组");
  • }
  •      if(Array.prototype.isPrototypeOf(obj)){
  •        console.log("obj是数组");
  • }
  • if(Array.prototype.isPrototypeOf(fun)){
  •        console.log("fun是数组"); }

复制代码
200645rcexsnxxw3enp1pn.png


      2. instanceof: 判断一个对象是否由某个类型创建出来

                  对象 instanceof 类型名

                  obj instanceof Array 返回true,说明是数组

                  instancof会查找原型链上所有原型的构造函数


  • //判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •       console.log(arr instanceof Array);
  •       console.log(obj instanceof Array);  console.log(fun instanceof Array);

复制代码
200645rcexsnxxw3enp1pn.png

      3. getPrototypeOf:

           Object.getPrototypeOf(obj)==Array.prototype


  • //判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •      console.log(Object.getPrototypeOf(arr)==Array.prototype);
  •      console.log(Object.getPrototypeOf(obj)==Array.prototype); console.log(Object.getPrototypeOf(fun)==Array.prototype);

复制代码
200645rcexsnxxw3enp1pn.png

      4. Object.prototype.toString()方法:

         重写:override,子对象觉得父对象的方法不好用,可自己定义同名的自有方法替换父对象的方法

        callapply: 在调用方法的一瞬间,替换调用方法的对象,

        Object.prototype.toString.call(arr)

                           .apply(arr)


  • //判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •      console.log(Object.prototype.toString.call(arr));
  •      console.log(Object.prototype.toString.call(obj)); console.log(Object.prototype.toString.call(fun));

复制代码
200645rcexsnxxw3enp1pn.png

      5. Array.isArray(obj): 专门判断对象是否是数组!但存在浏览器兼容性问题


  • //判断一个对象是否是数组
  • var arr=[1,2,3]; //Array.prototype
  • var obj={};    //Object.prototype
  • var fun=function(){}; //Function.prototype
  •      console.log(Array.isArray(arr));
  •      console.log(Array.isArray(obj)); console.log(Array.isArray(fun));

复制代码
200645rcexsnxxw3enp1pn.png
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网