對(duì)象、原型

1.OOP 指什么?有哪些特性

OOP全稱(Object Oriented Programming)面向?qū)ο缶幊蹋怯?jì)算機(jī)的一種編程架構(gòu)。
OPP的一條基本規(guī)則是,計(jì)算機(jī)程序由能夠起到子程序作用的單個(gè)或?qū)ο蠼M合而成。包含屬性和方法的是對(duì)象實(shí)例,而JS沒(méi)有類的概念,而是直接使用對(duì)象來(lái)完成編程任務(wù)。面向?qū)ο缶幊淌沟贸绦蛴辛藦?fù)用性,能夠明確的實(shí)現(xiàn)某一項(xiàng)具體的功能,使得程序員更加注重工程項(xiàng)目的需求分析,而非某一具體功能實(shí)現(xiàn)的內(nèi)在邏輯,極大的縮短了項(xiàng)目周期。
特性有:

  • 封裝性:把客觀的事物封裝成抽象的類,要用的時(shí)候只需要調(diào)用,而不需要在意內(nèi)部是怎么樣運(yùn)行的。
  • 繼承性:可以使用現(xiàn)有類的功能,并且可以在不重新編寫原來(lái)類的情況下,進(jìn)行擴(kuò)展。
  • 多態(tài):是指通過(guò)繼承得到相關(guān)而不同的類,其對(duì)象對(duì)不同的消息會(huì)做出不同的響應(yīng)。多態(tài)的核心思想是將變與不變的東西區(qū)分開(kāi)來(lái),因?yàn)镴S是弱類型語(yǔ)言,所以沒(méi)有傳統(tǒng)的面向?qū)ο缶幊痰亩鄳B(tài)。
  • 抽象:簡(jiǎn)化復(fù)雜的現(xiàn)實(shí)問(wèn)題的路徑,它可以為具體問(wèn)題找到最恰當(dāng)?shù)念惗x,并且可以在最恰當(dāng)?shù)睦^承級(jí)別解釋問(wèn)題。
2. 如何通過(guò)構(gòu)造函數(shù)的方式創(chuàng)建一個(gè)擁有屬性和方法的對(duì)象?

函數(shù)也是對(duì)象的一種它繼承了對(duì)象原型,可以對(duì)其添加屬性和方法,而構(gòu)造函數(shù)也是一種函數(shù),所以用自定義函數(shù)的方式,所以使用new操作符來(lái)進(jìn)行實(shí)例驗(yàn)證。
例:

    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)建一個(gè)函數(shù)都有prototype屬性,這個(gè)屬性是一個(gè)指向一個(gè)對(duì)象的指針,這個(gè)對(duì)象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。
對(duì)象proto===構(gòu)造函數(shù)prototype,函數(shù)可以通過(guò)prototype這個(gè)屬性創(chuàng)建一個(gè)公共區(qū)域,此函數(shù)構(gòu)造的對(duì)象都可以通過(guò)它們來(lái)訪問(wèn)到這個(gè)公共區(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的時(shí)候定義調(diào)用者的age屬性
}
People.age = 20;//給函數(shù)People綁定了age屬性

  People.prototype.age = 30;//函數(shù)People的原型的age屬性

····

代碼

創(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;
}
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)載請(qǐng)注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容