通俗易懂的理解js的面向對象


1.在js的j世界里一般會把構造函數看成一個面向對象,其實面向對象從表面意思理解是面向全局的一個對象,構造函數就是那個面向全局的對象(函數本身就是一個對象)

2.什么樣的是構造函數,一般首字母大寫的可以看成是構造函數(如果不是想定義構造函數誰沒事把首字母大寫啊~~)

通俗的理解:

你可以把構造函數他當成一個陶瓷工坊(Shop),這個工坊面向所有人的(面向對象),哪一天你突然來興趣了想做一個陶瓷杯子,但是這家店有個規矩你想用我可以,必須成為我們的會員,辦一個新會員(new Shop()),每個想進來的人都要(new Shop())一下,成為新會員后,你就可以做自己喜歡的杯子了,這個杯子的形狀,顏色你都可以按自己的喜好來,當然每個人的喜好不同所以這些屬性都不是固定的。(所以這就不難理解構造函數里面的this總是指向當前構造它的實例對象,因為當然是誰制造了它它就跟誰了)

我們都知道一個東西不僅有屬性還會有功能,比如說杯子是用來喝水的

function Shop(color,shap){

  this.color=color;

  this.shap=shap;

  this.drink=function(){

    console.log(‘我能夠喝水’);

  }

}

var my=new Shop('red',‘圓’);//此時構造函數里面的this是指向my

var mother=new Shop('blue','長方形');//此時構造函數里面的this是指向mother

此時有一個疑問my.drink==mother.drink嗎?

答案當然是否定的了,因為他們都不是一個媽媽生的即使都會吃喝拉撒那也不是同一個人吧,同理這里也是一樣;

但是大家有沒有發現

var arr1=new Array(1,2,3);

var arr2=new Array(4,5,6);

arr1.push==arr2.push是對的;

這就牽扯到了原型:

原型prototype是每個構造函數都有的屬性對象(因為它是這個函數下面的屬性,同時它本身又是對象類型)

只要是對象下面就可以有自己的屬性和方法,原型上的屬性和方法可以看成共用的,公有的

同樣用上面的列子通俗點講原型上面的屬性和方法:

原型可以看成店里面的杯子,不屬於我們任何人但是我們都可以用,是大家的公有的,能用但帶不走,這就能解釋arr1.push==arr2.push,因為它是定義在原型下面的Array.prototype.push

我們一般會把一些大家都有的功能放在原型上,這樣也就不需要每次創建實例對象時,都要把這個方法掛載在對象下面,比較浪費性能,所有人都用原型下面方法的就行了

原型下面的屬性也是同樣的道理。 但是一些屬性沒法公有還是要對象本身自帶的,比如人的身份證號等等一些獨一無二的.

對象有私有的就用私有的,如果沒有私有的就用公有的(私有的優先級大於公有的),就像你有私家車了,還會做公交車一樣的道理嗎?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM