d>“面向?qū)ο缶幊獭保∣bject Oriented Programming京腥,縮寫為OOP)是目前主流的編程范式被冒。面向?qū)ο笞钪匾娜筇卣魇欠庋b古今、繼承和多態(tài)。
一 封裝
一個對象提供一些公有的方法和屬性供外部使用(接口)右蹦,一些私有的屬性和方法供對象本身調(diào)用诊杆。封裝是模塊化的基石鲫懒,還避免了命名沖突的問題。
上面例子中function A的是從外面可以任意訪問的刽辙,沒有做好封裝窥岩。
var _config是個局部變量,然后給A增加了一個getConfig方法宰缤。既保證了外部可以訪問到_config屬性颂翼,又可以保證_config不會被外部任意改寫。因為一般來說慨灭,每一個子類的屬性都是私有的朦乏。
下面定義在prototype上的方法可以被外部訪問,原型對象上的所有屬性和方法氧骤,都能被派生對象共享呻疹。但原型對象的屬性不是實例對象自身的屬性。只要修改原型對象筹陵,變動就立刻會體現(xiàn)在所有實例對象上刽锤。
二 繼承
- 類繼承:JS中其實是沒有類的概念的,所謂的類也是模擬出來的朦佩。類式繼承是在函數(shù)對象內(nèi)調(diào)用父類的構(gòu)造函數(shù)并思,使得自身獲得父類的方法和屬性。call和apply方法為類式繼承提供了支持语稠。通過改變this的作用環(huán)境宋彼,使得子類本身具有父類的各種屬性。
var father = function() {
this.age = 52;
this.say = function() {
alert('hello i am '+ this.name ' and i am '+this.age + 'years old');
}
}
var child = function() {
this.name = 'bill';
father.call(this);//使用call繼承father的屬性和方法
}
var man = new child();
man.say();
-
原型繼承是JavaScript中固有的
- 組合模式:用類式繼承屬性仙畦,而原型繼承方法输涕。這種模式避免了屬性的公用,因為一般來說慨畸,每一個子類的屬性都是私有的莱坎,而方法得到了統(tǒng)一。這種模式稱為組合模式先口,也是繼承類式常用到的一種方法型奥。
function father() {
this.a = 'father'
}
father.prototype.b = function() {
alert(this.a)
}
var child = function() {
father.call(this)
}
child.prototype = new father();