• js之面向对象


    本文的面向对象分为ES6和ES6之前的,重点学习ES6的
    ===============================
    一、面向对象
    1、什么是面向对象
      a)什么是对象:万物都可以抽象成对象
        时间对象
        var oDate=new Date();(我们经常var的oDate就是一个时间对象)
        oDate.getFullYear();(新建的oDate就继承了Date里面的所有方法)
        数组
        var arr=new Array();
        arr.sort();
        arr.length;
        json{
          name:'aa',
          showName:function(){
            alert(1);
          }
        }
        json.name;(json对象的属性)
        json.showName();(json对象的方法)
      b)面向对象是一种思想:
        我们只关心怎么去用,不关心里面是怎么实现的
        提高了效率

    2、怎么去面向对象
      a)先要有一个对象
        对象都有特征,都有属性和方法

        属性 属性就是变量,只不过他有依附关系
        特征 变量 自由的,独立的

        方法 就是函数,只不过他有依附关系

        函数 独立的

      b)造对象
        1、var arr=[];
        批量造对象

      c)构造函数:用来造对象的函数,构造函数也是函数,只是因为用途而得名,为了和普通函数做区别,首字母大写就是构造函数

      d)this 想要学好面向对象 必须知道this指向谁
        new是干什么的
        1、会在构造函数开始的位置创建一个空对象(并且把this指向空对象);
        2、自动返回空对象

      e)属性不同的,方法是相同的
        是ES6之前面向对象的核心:原型

      f)面向对象怎么写: 构造原型混合模式
        1、构造身上加属性
        2、原型身上加方法 prototype

          function Person(name,age){
            //添加属性和方法
            this.name=name;
            this.age=age;
          }
          Person.prototype.showName=function(){
            alert('我是舞王'+this.name);
          };

          g)prototype 也是对象
            1、写面向对象是为了扩展系统方法

          h)arr.indexOf()

            练习题:
              时间对象里面 getDay 0-6 0星期天
              getCnDay 星期一 --- 星期日

    -----------------------------------
    二、总结:
      1.什么是对象:
        一切都是对象
      2.什么是面向对象:
        只关心怎么调用,不关心怎么实现的
      3.怎么写一个类 就是一个构造函数
        属性加在构造身上
        方法加在原型身上

        function Person(...){
          this.XX=XXX //加属性
        }
        Person.prototype.XXX=function(){}; //加方法
      4.怎么去造一个对象
        new 类名()
        eg var barry=new Person();(barry获得person的属性和方法)
      5.new 都干了什么
        1)、造一个空对象,并把this指向对象
        2)、返回这个对象
      6.prototype原型:
        1)、可以写面向对象
        2)、可以扩展系统的方法
      7.原型和原型链的区别
        原型prototype 就是一个对象,存在于每个对象身上
        原型链:就是因为有prototype的存在,js产生了原型链
      8.ECMAScript 里面的方法都是用原型写的

        类 在js里面类就是构造函数
        实例 构造函数调用完返回的对象

      9.面向对象--一种思想

      10.面向对象的特征:
        封装 抽象了事物的核心
        多态 一个事物可以继承多个亲属的特征
        继承 事物得到了父亲的一些特征
    -----------------------------------
    11.object
      instanceof 检测一个物体的血缘关系
        子级 instanceof 父级 返回true false
      constructor 物体是由那个构造器诞生的
        子级.constructor==父级 返回true false

      包装类(是java里面的)
      简写的数据类型object不认。
    12.this 有优先级 从上到下,优先级变小
      new object
      定时器 window
      事件 触发事件的对象
      对象 对象
      show() window
    13.继承 子级继承父级的功能
      给父级一个功能,子级默认就有

      玩继承:
      属性
      在子级的构造中,调用父级的构造
      function 子级(name,age){
        //父级.call(this,name,age);
        父级.apply(this,arguments);
      }
      方法
      1、son.prototype=father.prototype;
        问题:子级改了父级也改变
      2、for(var name in father.prototype){
        son.prototype[name]=father.prototype[name];
      }
        问题:孩子不认爷爷
      3、 子级.prototype=new 父级();
        问题:子级的孩子不认子级
      终极版:子级.prototype.constructor=子级;
    -----------------------------------------------
    三、ES6
      1.对象
        let name='张三';
        let json={
          name,
          showName(){
            alert(this.name)
          }
        }
      2.面向对象
      class Person{ //类
        constructor(name,age){ //构造 属性加在构造身上
          this.name=name;
          this.age=age;
        }

        showName(){
          alert(this.name);
        }

        showAge(){
          alert(this.age);
        }
      }
      3.继承
        class Student extends Person{
          constructor(name,age,job){
            super(name,age);//super在这里就是向上越级继承父级的属性
            this.job=job;本身又加的属性
          }

          showJob(){
            alert(this.job);
          }
        }

    -------------------------------------------------

    ES6之前构造函数里子级继承父级的属性
      函数名.call(this的指向,参数。。。。)针对多个参数的情况,不确定数量
      函数名.apply(this的指向,[参数,参数。。。。]);

    ------------------
    对象引用
    js为了节省空间,采取的一种行为;
    var arr=[1,2,3];
    var arr2=arr;
    ------------------
    for-in 通过对象的属性进行循环
    用来循环对象的。但是能用for循环就不用for-in

    for var i=0;i<10;i++
    -------------------

    json{

    "a":"1",

    "b":"2",

    "c":"3"

    }

     for(var v in json){

      console.log(v);//打印出1,2,3

     }

  • 相关阅读:
    20160205.CCPP体系详解(0015天)
    盘点各专业到古代都能干些啥
    一份简单的在 Linux下编译及调试 C 代码的指南
    WordPress Gravatar国内加载缓慢解决办法
    linux修改mysql字符集编码
    阿里合伙人邵晓锋:什么是创业者应该抵制的诱惑?
    6月27日云栖精选夜读:细数智能家居的痛点
    6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么
    搭建百万级别邮件发送平台
    黑科技实验室:这些高级装备厉害了!
  • 原文地址:https://www.cnblogs.com/barry1102/p/6955074.html
Copyright © 2020-2023  润新知