問題1: OOP 指什么?有哪些特性
面向?qū)ο蟪绦蛟O(shè)計(jì)(英語:Object-oriented programming,縮寫:OOP)是種具有對象概念的程序編程范型,同時(shí)也是一種程序開發(fā)的抽象方針。它可能包含數(shù)據(jù)、屬性、代碼與方法。對象則指的是類的實(shí)例。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性,對象里的程序可以訪問及經(jīng)常修改對象相關(guān)連的數(shù)據(jù)。在面向?qū)ο蟪绦蚓幊汤?,?jì)算機(jī)程序會(huì)被設(shè)計(jì)成彼此相關(guān)的對象。
原則
- 對于擴(kuò)展是開發(fā)的(open for extension),當(dāng)應(yīng)用的需求改變時(shí),我們可以對模塊進(jìn)行擴(kuò)展,使其滿足新的需求
- 對于修改是封閉的(closed for modification),對模塊行為進(jìn)行擴(kuò)展時(shí),不必改動(dòng)模塊源代碼或者二進(jìn)制代碼
面向?qū)ο缶哂?strong>封裝性,繼承,多態(tài)等特性:
- 封裝:將相同屬性、方法、邏輯關(guān)系的模塊放在一起,通過限制只有特定類的對象可以訪問這一特定類,通常利用接口實(shí)現(xiàn)消息的傳入傳出
- 繼承:在某種情況下,一個(gè)類會(huì)有“子類”。子類比原本的類(稱為父類)要更加具體化,子類會(huì)繼承父類的屬性和行為,并且也可包含它們自己的。
- 多態(tài):是指由繼承而產(chǎn)生的相關(guān)的不同的類,其對象對同一消息會(huì)做出不同的響應(yīng)
如何通過構(gòu)造函數(shù)的方式創(chuàng)建一個(gè)擁有屬性和方法的對象?
代碼如下:
var Person= function () {
this.name: "Scofield"
this.age: 23
}
NPC.prototype.say = function() {
console.log('hello')
var NPC = new Person()
問題3: prototype 是什么?有什么特性
prototype表示原型對象。原型的屬性,在它所創(chuàng)建的對象實(shí)例中共享,當(dāng)JS程序讀取對象中屬性時(shí),首先讀取的是對象中定義的屬性,如果屬性不存在,則到對象的原型中搜索,這也體現(xiàn)JS的繼承擴(kuò)展特性
問題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 對象,擁有屬性name、color、status;擁有方法run,stop,getStatus
var Car = function(name,color,status) {
this.name = name
this.color = color
this.status = status
}
Car.prototype.run = function () {
console.log('I am runing')
}
Car.prototype.stop = function() {
console.log('I am stop')
}
Car.prototype.getStatus = function() {
console.log(this.status)
}
var car = new Car("auto","red","stop")
</script>