標籤:數組 學習 優先 模式 對象 rip get app 迴圈對象
本文的物件導向分為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、會在建構函式開始的位置建立一個Null 物件(並且把this指向Null 物件);
2、自動返回Null 物件
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)、造一個Null 物件,並把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
}
js之物件導向