LeoWangJ / blog

紀錄學習文章
1 stars 0 forks source link

基本類型怎麼取的toString方法 #24

Open LeoWangJ opened 4 years ago

LeoWangJ commented 4 years ago

先看一個例子:

let n = 1
n.toString() // 印出 "1"

直接印出n的值時也沒有看到有任何的prototype可以使用,那為什麼n可以使用到toString方法呢?
而且n是一個基本類型怎麼能夠使用物件的方法呢?

首先我們要先說明let n = new Number(1)與 let n = 1 的差別。

使用new Number 會創建一個物件,而這個物件會擁有Number的prototype且Number的prototype又指向Object的prototype,所以使得我們可以同時使用Number與Object的prototype。

let n = new Number(1)

n -----> Number.prototype -----> Object.prototype

而使用let n = 1 時,他並不會生成一個物件,所以JS作者就用了一個方法解決這個問題。
就是當基本類型要使用prototype的東西時,會去new一個對應類型的物件,這個物件會提供n取得protoype的方法,等到取用結束後這個物件就會釋放掉避免佔太多記憶體。

再看一個例子:

let n = 1
n.xxx = 2
console.log(n.xxx) // undefined

由於上面我們已經說過當要對基本類型進行物件的操作時,會先創建一個暫時的物件且當操作結束後該物件就會被釋放掉,所以要再次調用n.xxx時就會是undefined。