對象與構造函數與包裝類

咱們前面已經接觸過對象這一種數據,這一篇着重介紹一下對象的有關知識喲~瀏覽器

 

對象建立方法

對象的建立方法有三種:函數

1.對象字面量this

咱們前面的對象建立方法都是使用的字面量的方法建立的。spa

這樣的方式就叫作字面量,也是咱們建立對象最簡單最經常使用的方法3d

對象裏面有屬性,屬性之間用逗號分隔,每一條屬性都有屬性名和屬性值,屬性名和屬性值之間用分號分隔。對象

2.構造函數blog

構造函數也分兩種:系統自帶的構造函數和咱們自定義的構造函數。字符串

• 系統自帶的構造函數原型

建立對象的構造函數是Object()。console

經過這條語句,咱們就建立了一個空對象。

它的做用和var obj = {};的做用是同樣的。

系統自帶的構造函數還有不少,好比Number()、String()、Boolean()、Array()這些都是構造函數。

• 自定義構造函數

自定義的構造函數是咱們平時最經常使用的一種構造函數

構造函數也是正常的函數,咱們爲了區分它和別的正常函數,把構造函數的首字母大寫。

上面就聲明瞭一個構造函數Person。

有了構造函數以後,咱們就能夠用new操做符來建立對象了。

這樣咱們也建立了一個對象oPerson,不過如今這個對象是空對象,由於咱們的構造函數什麼都沒有寫,咱們也沒有給這個對象添加任何屬性。

另外,用new操做符建立出來的對象,儘管都是使用的同一個構造函數,可是之間是沒有關聯的。

person1 和 person2 之間沒有關係,它們兩個是單獨的對象。

咱們能夠在構造函數裏面寫一些對象天生就有的默認屬性。

固然構造函數既然是函數,那麼就能夠傳參數。

建立對象的時候,只有new纔會有this

這裏有一個重點,爲何咱們經過new操做符能夠建立互相獨立的對象呢

其實,當咱們用new操做符的時候,這個new在咱們的構造函數裏面隱式建立了一個this對象,而且最後返回了這個this對象,這也就是爲何咱們經過new能夠最後建立一個對象的緣由了。

若是咱們在構造函數首行手動建立一個對象,好比that對象,而後最後返回了that,那麼裏面的this就沒有用了,我麼要爲屬性賦值就要用that了。

這樣默認的name值就是scarlett。

重點:若是咱們最後返回的對象,那麼this就失效,可是若是最後顯示返回的是原始值,那麼this仍是有效的。

3.Object.create(原型)

這種方法涉及到原型的知識點了,咱們放在後面介紹原型的時候再介紹。

 

屬性的增刪改查

其實屬性的修改咱們前面也都接觸過了。

1.

咱們能夠經過對象名+點+屬性名的方法來給對象添加新的屬性而且賦值。

這個時候若是咱們調用obj.age屬性的話,這個屬性並不存在,可是obj這個對象是存在的,所以瀏覽器不會報錯,只會打印undefined。

2.

修改的操做和增長的操做實際上是同樣的,只要調用相同的屬性名而後賦一個新的值就能夠了。

3.

其實咱們前面一直都在使用查看屬性的功能…

obj.name = ‘demo’;

console.log(obj.name);//demo

這就是查看屬性的方法。

4.

刪除屬性的操做咱們須要藉助delete操做符,這個操做符的做用就是來刪除屬性的。

 

包裝類

咱們前面提到過,原始值是不能夠改變的,只有對象纔有屬性和方法,那麼這個又是個什麼東西?

按理說這個字符串原始值是沒有屬性的,可是這裏確實能夠查看length這個屬性。

這裏就涉及到一個叫作包裝類的東西了。

咱們在調用執行這一行代碼以前,程序會自動把str包裝成一個字符串對象,在這一行代碼執行完畢以後再銷燬這個字符串對象。

這裏的str.length的str實際上是上一句的包裝好的str1,str1是對象,上面有屬性和方法,而後就能夠打印length屬性了,在執行完str.length這行代碼以後,str1這個對象就被銷燬了。

這也就是爲何咱們在執行str.length = 2;這句話以後,再打印str.length;仍是4的緣由了。

系統在執行str.length = 2這句話的時候,先建立了一個String對象,這個對象的值是‘abcd’,咱們改變的length實際上是這個隱式建立的對象的length值,並非改變了咱們的原始值str,當str.length = 2;這句代碼執行完以後,隱式建立的字符串對象就被銷燬了,因此咱們後面打印的str.length仍是4。

其餘類型的數據也是同樣的,當咱們給原始值加屬性的時候,都是先隱式包裝成對象,而後賦完屬性值以後再銷燬這個對象。

相關文章
相關標籤/搜索