什么是面向對象:
ECMAScript 有兩種開發模式:1.函數式(過程化),2.面向對象(OOP)。面向對象的語言有一個標志,那就是類的概念,而通過類可以創建任意多個具有相同屬性和方法的對象。 但是,ECMAScript 沒有類的概念,因此它的對象也與基于類的語言中的對象有所不同。
面向對象編程(OOP)的特點:
??? 封裝:不考慮內部實現,只考慮功能使用
??? 繼承:從已有對象上,繼承出新的對象
??? 多態:同一個函數調用會有不同的執行效果
對象的組成
??? 方法——函數:過程、動態的
??? 屬性——變量:狀態、靜態的
為對象添加方法和屬性:
?? 創建對象:var obj=new Object();
?? 添加屬性:obj.name=‘abc’;
?? 添加方法:obj.show=function(){alert(this.name)}
注 :不能在系統對象中隨意附加方法、屬性,否則會覆蓋已有方法、屬性
構造函數:
構造函數與其他函數的唯一區別在于調用它們的方式,任何函數,只要通過new操作符來調用,就可作為構造函數;而任何函數,若不通過new操作符調用,就是普通函數。
什么是原型:
??? 原型可以讓所有對象實例共享它所包含的屬性和方法
為Array添加sum方法:
???? 給對象添加方法,類似于行間樣式
???? 給原型添加方法,類似于class
原型的小缺陷:
??? 無法限制覆蓋
用混合方式構造對象:
??? 混合的的構造函數/原型方式
??? Mixed Constructor Function/Prototype Method
原則:
??? 構造函數:加屬性
??? 原型:加方法
對象命名規范:
??? 類名首字母大寫
構造函數偽裝???? call()方法:
定義:應用某一對象的一個方法,用另一個對象替換當前對象。
語法: Function.call(obj,arg1,arg2,…)方法能接收多個參數
??? obj:這個對象將代替Function類里this對象
??? arg:這個是參數,它將作為參數傳給Function
如果沒有提供 arg和 obj任何一個參數,那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數。
構造函數偽裝? apply()
定義:應用某一對象的一個方法,用另一個對象替換當前對象。
語法: Function.apply(obj,args)方法能接收兩個參數
??? obj:這個對象將代替Function類里this對象
??? args:這個是數組,它將作為參數傳給Function(args-->arguments)
如果沒有提供 args 和 obj任何一個參數,那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數。
ECMAScript只支持實現繼承,且其實現繼承主要依靠原型鏈來實現
原型鏈:
原型鏈的基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法
instanceof操作符:
是一個運算符,運算中需要兩個操作數,運算的結果是true或false,表示此值是不是某一個類的示例,能得到一個值的具體類型。
什么是閉包?
函數 嵌套函數,內部函數可以引用外部函數的參數和變量,參數和變量不會被垃圾回收機制所收回
閉包有什么好處?應用在那里?
好處:
1.希望一個變量長期駐扎在內存當中
2.避免全局變量的污染
3.私有成員的存在
應用:
1.模塊化代碼
2.在循環中直接找到對應元素的索引
閉包需要注意得地方??????
?IE下會引發內存泄漏
本地對象(非靜態對象):
??? 常用對象
????????? Object、Function、Array、String、Boolean、Number、Date、RegExp、Error
內置對象(靜態對象):
?????????? Global、Math
宿主對象(由瀏覽器提供的對象):
??? DOM、BOM