問題1: OOP 指什么婿屹?有哪些特性
OOP即面向?qū)ο缶幊蹋∣bject Oriented Programming)勾怒,面向?qū)ο缶幊炭梢钥醋魇鞘褂靡幌盗袑?duì)象進(jìn)行相互分工與合作的的軟件設(shè)計(jì)模式,在 OOP 中腋颠,每個(gè)對(duì)象能夠接收消息,處理數(shù)據(jù)和發(fā)送消息給其他對(duì)象,因此面向?qū)ο缶幊叹哂泻艽蟮撵`活性和可維護(hù)性焰雕,對(duì)于每個(gè)對(duì)象所示用的變量均處于該對(duì)象的作用域范圍內(nèi),從而避免了污染全局作用域的問題芳杏,使得面向?qū)ο缶幊谈m合多人合作的項(xiàng)目
面向?qū)ο缶幊逃腥筇匦?/p>
- 封裝
將一個(gè)類的使用和實(shí)現(xiàn)分開矩屁,只保留部分接口和方法與外部聯(lián)系 - 繼承
子類自動(dòng)繼承其父級(jí)類中的屬性和方法,并可以添加新的屬性和方法或者對(duì)部分屬性和方法進(jìn)行重寫爵赵。繼承增加了代碼的復(fù)用性 - 多態(tài)
子類繼承了來自父級(jí)類中的屬性和方法吝秕,并對(duì)其中部分方法進(jìn)行重寫
問題2: 如何通過構(gòu)造函數(shù)的方式創(chuàng)建一個(gè)擁有屬性和方法的對(duì)象?
function People(name){
this.name = name; // 給對(duì)象的屬性賦值
this.printName = function(){ // 給對(duì)象的屬性添加函數(shù)即方法
console.log(name);
};
}
問題3: prototype 是什么?有什么特性
JavaScript 的每個(gè)對(duì)象都繼承另一個(gè)對(duì)象空幻,后者稱為“原型”(prototype)對(duì)象烁峭。只有null除外,它沒有自己的原型對(duì)象秕铛。
原型對(duì)象上的所有屬性和方法约郁,都能被派生對(duì)象共享。這就是 JavaScript 繼承機(jī)制的基本設(shè)計(jì)但两。
通過構(gòu)造函數(shù)生成實(shí)例對(duì)象時(shí)棍现,會(huì)自動(dòng)為實(shí)例對(duì)象分配原型對(duì)象。每一個(gè)構(gòu)造函數(shù)都有一個(gè)prototype屬性镜遣,這個(gè)屬性就是實(shí)例對(duì)象的原型對(duì)象己肮。
原型對(duì)象的屬性不是實(shí)例對(duì)象自身的屬性。只要修改原型對(duì)象悲关,變動(dòng)就立刻會(huì)體現(xiàn)在所有實(shí)例對(duì)象上谎僻。
問題4:畫出如下代碼的原型圖
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
}
var p1 = new People('饑人谷');
var p2 = new People('前端');
問題5: 創(chuàng)建一個(gè) Car 對(duì)象,擁有屬性name寓辱、color艘绍、status;擁有方法run秫筏,stop诱鞠,getStatus
function Car(name, color, status){
this.name = name
this.color = color
this.status = status
this.run = function(){
console.log('The car is running')
}
this.stop = function(){
console.log('The car stopped')
}
this.getStatus = function(){
console.log('The car is getting status')
}
}
var car1 = new Car('Buick','black','running')