深切進修js的面向對象

在之前的一篇文章的末端我提到了JavaScript的對象建立要領,能夠應用函數,內置對象和this等關鍵詞完成對象的建立。然則很遺憾,我最早打仗的面向對象的編程言語是java,因此關於這些完成面向對象的要領並不是本身的首選。下面是那篇文章:
記一次兩小時的js編程進修

我們必需邃曉面向對象的詳細寄義,特別關於JavaScript中來講,因為很明顯它與其他言語中存在着較大的差異。JavaScript 供應多個內建對象,比方 String、Date、Array 等等。

對象只是帶有屬性和要領的特別數據類型。JavaScript中對象被當作了特別數據結構struct,而平常的言語被當作類的實例化。

  • 布爾型能夠是一個對象。
  • 数字型能夠是一個對象。
  • 字符串也能夠是一個對象
  • 日期是一個對象
  • 數學和正則表達式也是對象
  • 數組是一個對象
  • 以至函數也能夠是對象

平常的言語,都是應用類來建立對象,完成面向對象的歷程。舉個最熟習的java言語的例子:

Scanner input=new Scanner(System.in);
int num=input.function();
String num=input.var;

而JavaScript卻差別,這是因為JavaScript的設想本質上是一種面向歷程的言語。雖然JavaScript現在早已演變成一種面向對象的言語,卻也不運用類來建立對象。

直到2015年6月的ES6,OOP被標準化。舉個例子:

function Car(Color,Year,Make,Miles){
  this.color=Color;
  this.year=Year;
  this.make=Make;
  this.odometerReading=Miles;
  this.setOdometer=function(newMiles){
    this.odometerReading=newMiles;  
  }
}

這裡有一個很莊重的題目,即類的擴大,在js中來講就是對象屬性和要領的擴大。java中有繼續extends來完成對父類的繼續。但JavaScript中卻基礎沒有類的觀點,就只能另尋它法完成擴大和繼續。

在JavaScript中,當一個對象已被實例化,假如我想一想讓它具有新的要領和屬性就須要借用關鍵字prototype。舉個例子:

function Car(color){
    this.color=color
}
var car=new Car("red")
console.log(car.color)
// car.length=5
// car.setColor("green")
Car.prototype.length=5
Car.prototype.setColor=function(newColor){
    this.color=newColor
}
console.log(car.length)
car.setColor("green")
console.log(car.color)
-----------------------------------------------------
red
5
green
[Done] exited with code=0 in 0.206 seconds

我們須要給car加上長度和設置新的色彩,須要應用沒有實例化之前的Car,再借用關鍵詞prototype才能夠完成增加屬性和新要領的操縱。

除了擴大,我們還須要繼續,JavaScript照舊運用prototype關鍵詞完成繼續的操縱。

function Pet(){
  this.animal="pet"
  this.name="ahhh"
}
function Cat(){
  this.age=2
}
//接下來就是讓Cat這個類具有Pet類的屬性和要領的操縱
Cat.prototype=new Pet()  //給Cat類加上Pet類的悉數屬性和要領

為何說上面的Cat和Pet是類,犹如java,我們默許類的首字母大寫。JavaScript運用函數面向對象的優點在於能夠在函數中增加浩瀚的變量和函數。內置的Object()過於簡樸。

引薦瀏覽:
記一次兩小時的js編程進修

個人博客十八
迎接人人交換博客,我善於串改大佬們寫的源碼喲!

    原文作者:十八
    原文地址: https://segmentfault.com/a/1190000015402531
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞