面向對象2

 

 

 

1.面向對象的目的就是生成對象object數組

2.  生成對象的方式app

  (1)  單例模式(字面量定義) var obj={}函數

  (2) 類的實例    var obj=new Object()this

  (3)    工廠模式prototype

  (4) 構造函數: 扮演三種角色 普通函數       普通的對象        類3d

工廠模式,生成的對象必需要返回,構造函數模式不用return,構造函數模式默認return的是this,在構造函數內的this就是實例對象。對象

構造函數若是認爲return的不是對象,直接忽略,若是人爲return的是對象,就取代this。blog

工廠模式生成的實例對象的__proto__直接指向基類Object的原型繼承

構造函數生成的實例對象的__proto__指向他父類的原型,而後父類的原型上的__proto__指向基類Object的原型。原型鏈

 每一個實例和實例之間都是獨立的個體,他們之間的屬性互不干擾,是不等的,若是實例和實例之間的屬性相等,則這個屬性必須是父類的原型上的屬性。是由於父類原型上的屬性是可繼承的,是共享的。

 在操做obj.屬性的時候,首先看這個屬性是私有的仍是從父類的原型上繼承的,若是是私有的直接使用,若是是私有的直接使用,若是私有的沒有呢就查看父類的原型上有沒有,若是有就直接使用,若是沒有呢,再次向父類的父類的原型上查找,一直查到基類Object上爲止,若是object也沒有就獲得undefined。這就是原型鏈。

實例的__proto__上的屬性

Instanceof判斷對象是否是這個類的實例對象

isprototypeOf()判斷實例對象是不是父類的原型

getprototypeOf()獲取實例對象的原型

hasOwnProPerty()判斷一個屬性是否是自身(私有)的屬性

In判斷一個屬性是否是這個對象上的無論是私有的仍是公有的

實例對象的原型就是他父類的原型

若是不給類的原型指定一個對象,這個實例對象的__proto__上有一個constructor的屬性。

若是給這個類的原型指定了一個對象,實例上的__proto__就沒有constructor屬性了。

This指向問題

  1.this是一個對象,函數外的this都指向window,

  2.函數內的this,他的指向跟函數調用有關,看函數前面有沒有.有點就指向.前面的對象,沒有就指向window。

  3.定時器的this永遠是window,自執行函數裏的this是window。

  4.構造函數裏的this和原型上的this都是指向實例對象

改變this指向的方法

  提早將this賦值

  call

  apply

  call和apply執行是同樣的都是將前面函數內的this改爲第一個參數,而後執行前面的函數,不一樣在第二個參數開始   apply是一個數組

  bind bind是隻改變前面函數的this,可是不執行前面的函數,須要加一個()才執行

繼承

  1.      call繼承    子類繼承父類

  將父類的私有屬性繼承位子類的私有屬性

 

  2.原型繼承     將父類的私有和公有屬性都繼承爲子類的公有屬性

  子類的原型=父類的實例       B.prototype=new A()

相關文章
相關標籤/搜索