1.OOP 指什么?有哪些特性
OOP全稱(Object Oriented Programming)面向?qū)ο缶幊蹋怯嬎銠C的一種編程架構(gòu)。
OPP的一條基本規(guī)則是,計算機程序由能夠起到子程序作用的單個或?qū)ο蠼M合而成。包含屬性和方法的是對象實例,而JS沒有類的概念,而是直接使用對象來完成編程任務(wù)。面向?qū)ο缶幊淌沟贸绦蛴辛藦?fù)用性,能夠明確的實現(xiàn)某一項具體的功能,使得程序員更加注重工程項目的需求分析,而非某一具體功能實現(xiàn)的內(nèi)在邏輯,極大的縮短了項目周期。
特性有:
- 封裝性:把客觀的事物封裝成抽象的類,要用的時候只需要調(diào)用,而不需要在意內(nèi)部是怎么樣運行的。
- 繼承性:可以使用現(xiàn)有類的功能,并且可以在不重新編寫原來類的情況下,進行擴展。
- 多態(tài):是指通過繼承得到相關(guān)而不同的類,其對象對不同的消息會做出不同的響應(yīng)。多態(tài)的核心思想是將變與不變的東西區(qū)分開來,因為JS是弱類型語言,所以沒有傳統(tǒng)的面向?qū)ο缶幊痰亩鄳B(tài)。
- 抽象:簡化復(fù)雜的現(xiàn)實問題的路徑,它可以為具體問題找到最恰當(dāng)?shù)念惗x,并且可以在最恰當(dāng)?shù)睦^承級別解釋問題。
2. 如何通過構(gòu)造函數(shù)的方式創(chuàng)建一個擁有屬性和方法的對象?
函數(shù)也是對象的一種它繼承了對象原型,可以對其添加屬性和方法,而構(gòu)造函數(shù)也是一種函數(shù),所以用自定義函數(shù)的方式,所以使用new操作符來進行實例驗證。
例:
function Sayhi(name,age){
this.name = name;
this.age = age;//這是屬性
this.say = function(){
console.log(this.name + ":我今年" + this.age + "歲了" )//這是方法
};
}
var S1 = new Sayhi("小明",28);
var S2 = new Sayhi("小紅",19);
3.prototype 是什么?有什么特性
prototype即原型,每創(chuàng)建一個函數(shù)都有prototype屬性,這個屬性是一個指向一個對象的指針,這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。
對象proto===構(gòu)造函數(shù)prototype,函數(shù)可以通過prototype這個屬性創(chuàng)建一個公共區(qū)域,此函數(shù)構(gòu)造的對象都可以通過它們來訪問到這個公共區(qū)域。
例:
function Sayhi(name,age){
this.name = name;
this.age = age;
Sayhi.prototype.Sayhello = function(){
console.log('hello')
}
}
var S1 = new Sayhi("小明",28);
var S2 = new Sayhi("小紅",19);
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.以下代碼中的變量age有什么區(qū)別
····
function People() {
var age = 1;//函數(shù)People的局部變量
this.age = 10;//當(dāng)調(diào)用函數(shù)People的時候定義調(diào)用者的age屬性
}
People.age = 20;//給函數(shù)People綁定了age屬性
People.prototype.age = 30;//函數(shù)People的原型的age屬性
····
代碼
創(chuàng)建一個 Car 對象,擁有屬性name、color、status;擁有方法run,stop,getStatus
····
function Car(name,color,status){
this.name = name;
this.color = color;
this.status = status;
}
Car.prototype.run = function(){
this.status = run;
};
Car.prototype.stop = function(){
this.status = stop;
};
Car.prototype.getStatus = function(){
console.log('this.status')
};
var Car1 = new Car("jili","white","running")
····
本文歸作者和饑人谷所有轉(zhuǎn)載請注明出處