1.找出對象的構造器----constructor/instanceofjavascript
constructor是用模版實例化對象的時候附帶的一個額外屬性,這個屬性指向建立該對象時所使用的javascript構造函數。java
用法:函數
var house = new Accommodation(); house.constructor === Accommodation; //true
這中比較也能夠用關鍵字instanceof來完成,this
var house = new Accommodation(); apartment instanceof Accomodation; //true
2.經過原型添加屬性和方法spa
javascript中的每一個函數,即每一個構造器,都有一個叫prototype的屬性。咱們用關鍵字new來建立一個「類」的對象實例時,實例中所包含的屬性和方法都來自prototype。prototype
能夠用點標記法和直接量標記法爲一個模版的全部對戲那個實例添加自定義的屬性和方法。code
點標記法:對象
//定義一個名爲Accommodation的構造函數 function Accommodation(){} //爲這個「類」添加屬性 Accommodation.prototype.floor = 0; Accommodation.prototype.rooms = 0; Accommodation.prototype.shareEntrance =false;
直接量標記法:blog
//定義一個名爲Accommodation的構造函數 function Accommodation(){} //經過對象直接量爲這個「類」添加屬性和方法 Accommodation.prototype = { floors:0, rooms:0, sharedEntrance:false, lock:function(){}, }
prototype這個屬性關鍵字有一個強大的特性是容許在對戲那個實例已經被建立後繼續添加屬性和方法,而這些新添加的屬性和方法會自動添加到全部對象實例中,無論是已建立的仍是將要建立的。ip
3.經過做用域添加屬性和方法
若是將一個變量或函數定義在任何一個函數以外,直接將其放在一個javascript或者HTML文件裏,那麼這個變量或函數會被添加到全局做用域中,這意味着在代碼的任何位置都可以使用該變量或函數,甚至在其餘函數體內也能夠。
4.上下文和this關鍵字
使用this的好處:能夠隨意改變對象的變量名而不用擔憂對象中方法的行爲收到影響。
上下文環境:在大多數狀況下指的是函數運行時封裝這個函數的那個對象;當不經過任何一個對象單獨調用時,上下文環境值得就是全局的window對象。
注意:對象中的潛逃函數其上下文環境是全局的window對象,而非包含它的那個對象,能夠在this指向包含這個函數的對象時,將this的值保存在一個變量中,而後在用到該對象時,用這個變量來代替。好比用變量名爲:that
在使用new關鍵字建立對象時,this執行的值和通常狀況下又有區別。this指向的是經過構造函數所建立的那個對象實例。正是由於這個特性,咱們得意在構造函數中經過this來設置全部對象實例的屬性和方法,而非像以前那樣使用prototype關鍵字。
結合prototype和this關鍵字來定義對象實例的屬性和方法,其中前者定義方法,後者來定義屬性。
5.方法的鏈式調用
若是但願可以對方法進行鏈式調用,則須要在「類」中的方法最後經過this關鍵字返回對象實例的引用便可。