面向對象的三大特征
1.封裝
- 通過類的封裝,隱藏內部細節
- 將復雜的邏輯通過函數封裝起來,使用的時候調用即可,不需要考慮內部的細節
2.繼承
- 子類可以從父元素繼承屬性或者方法
3.多態
- 指由繼承而產生的相關的不同的類,其對象對同一消息會作出不同的反應
- 簡單來說就是不同類型的不同形態
javascript中的繼承
1.混入式繼承
var o1 = {
name: "jack",
age: 18
}
var obj = {};
obj.extend = function (object) {
for (var k in object) {
this[k] = object[k];
}
}
obj.extend(o1);
console.log(obj);
}
2.原型繼承
- 利用對象的動態性
function Person() {
}
Person.prototype.say = function () {
return "hello"
};
Person.prototype.coding = function () {
return "coding"
};
var p = new Person();
console.log(p.say());
console.log(p.coding());
- 利用覆蓋原型對象
function Car() {
};
Car.prototype = {
//默認的原型對象中有constructor屬性,為了與原來的對象一致
//需要手動添加constructor屬性
constructor: Car,
drive: function () {
return "drive fast"
}
};
var car = new Car();
console.log(car.drive());
- 利用混入式繼承
function Student() {
}
Student.prototype.extend = function (object) {
for (var k in object) {
this[k] = object[k];
}
}
Student.prototype.extend({
name: "jack",
age: 18
})
var student = new Student();
console.log(student.name);
3.Object.create方法
//Object.create
//語法 : var newObj = Object.create( 參數對象 );
//將參數對象 看做 新對象 的原型對象
var obj = {
apple : "蘋果",
orange : "橘子"
}
var newobj = Object.create(obj);
console.log(newobj.apple);