ECMAScriptjs之面向对象

正文的面向对象分为ES六和ES6在此之前的,重点学习ES陆的

一、面向对象
一、什么是面向对象
  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指向空对象);
    二、自动重返空对象

  e)属性分化的,方法是如出1辙的
    是ES六此前边向对象的主导:原型

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

      function Person(name,age){
        //添加属性和措施
        this.name=name;
        this.age=age;
      }
      Person.prototype.showName=function(){
        alert(‘作者是舞王’+this.name);
      };

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

      h)arr.indexOf()

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


二、总结:
  一.怎么是目的:
    壹切都以对象
  2.怎么着是面向对象:
    只关注怎么调用,不爱护怎么落到实处的
  3.怎么写多个类 便是三个构造函数
    属性加在构造身上
    方法加在原型身上

    function Person(…){
      this.XX=XXX //加属性
    }
    Person.prototype.XXX=function(){}; //加方法
  4.怎么去造八个对象
    new 类名()
    eg var barry=new Person();(barry获得person的习性和办法)
  五.new 都干了什么样
    一)、造二个空对象,并把this指向对象
    2)、重返这么些目的
  6.prototype原型:
    1)、能够写面向对象
    贰)、能够扩张系统的办法
  七.原型和原型链的分别
    原型prototype 正是1个指标,存在于每种对象身上
    原型链:正是因为有prototype的存在,js发生了原型链
  八.ECMAScript 内部的办法都以用原型写的

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

  9.面向对象–一种沉思

  十.面向对象的性状:
    封装 抽象了东西的基本
    多态 3个事物能够三番五次多个亲朋好友的表征

    继承 事物获得了老爸的1些特色

11.object
  instanceof 检查测试二个实体的血缘关系
    子级 instanceof 父级 返回true false
  constructor 物体是由特别构造器诞生的
    子级.constructor==父级 返回true false

  包装类(是java里面的)
  简写的数据类型object不认。
1贰.this 有优先级 从上到下,优先级变小
  new object
  定时器 window
  事件 触发事件的靶子
  对象 对象
  show() window
一三.卫冕 子级继承父级的职能
  给父级七个功用,子级暗中同意就有

  玩继承:
  属性
  在子级的结构中,调用父级的构造
  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)
      }
    }
  二.面向对象
  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);
      }
    }


ES陆在此之前构造函数里子级继承父级的性质
  函数名.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

 }