學習筆記10 單例內建物件

2021-10-17 18:51:04 字數 3998 閱讀 1727

ecma-262對內建物件的定義是:「任何由ecmascript實現提供、與宿主環境無關,並在ecmascript程式開始執行時就存在的物件。」這就意味著,開發者不用顯式的例項化內建物件,因為它們已經例項化好了。本文介紹ecma-262定義的另外兩個單例內建物件:global和math。

global物件是ecmascript中最特別的物件,因為**不會顯式地訪問它。ecma-262規定global物件為一種兜底物件,它所針對針對的是不屬於任何物件的屬性和方法。在全域性作用域中定義的變數和函式都會變成global物件的屬性。前面介紹的函式,包括isnan()、isfinite()、parseint()和parsefloat()實際上都是global物件的方法。除此之外global物件上還有另外一些方法。

(1)url編碼方法

encodeuri()和encodeuricomponent()方法用於編碼統一資源識別符號uri,以便傳給瀏覽器。有效的uri不能包含某些字元,比如空格。使用uri編碼方法來編碼uri可以讓瀏覽器能夠理解它們,同時又以特殊的utf-8編碼替換掉所有無效字元。

encodeuri()方法用於整個uri進行編碼,而encodeuricomponent()方法用於編碼uri中單獨的元件。這兩種方法的主要區別是encodeuri()不會編碼屬於url元件的特殊字元,比如冒號、斜槓、問好、井號。而encodeuricomponent()會編碼它發現的所有非標準字元。

);與encodeuri()和encodeuricomponent()相對的是decodeuri()和decodeuricomponent()。decodeuri()只對使用encodeuri()編碼過的字元解碼。例如%20會被替換成空格,但%23不會被替換成井號,因為井號不是由encodeuri()替換的。類似地,decodeuricomponent()解碼所有被encodeuricomponent()編碼的字元,基本上就是解碼所有特殊值。

(2)eval()方法

最後乙個方法可能是整個ecmascript語言中最強大的了,它就是eval()。這個方法就是乙個完整的ecmascript直譯器,它接收乙個引數,即要執行的ecmascript字串:

eval

("console.log('hi')"

);

console.

log(

"hi"

);

當直譯器發現eval()呼叫時,會將引數解釋為實際的ecmascript語句,然後將其插入到該位置,通過eval()執行**屬於該呼叫所在的上下文,被執行的**與該上下文擁有相同的作用域鏈。這意味著定義在包含上下文中的變數可以在eval()呼叫內部被引用:

let msg =

"hello world"

;eval

("console.log(msg)");

//"hello world"

通過eval()定義的任何變數和函式都不會被提公升,這是因為在解析**的時候,它們是被包含在乙個字串中的,它們只是在eval()執行的時候才會被建立。

(3)global物件屬性

global物件有很多屬性,其中一些像undefined、nan和infinity等特殊值都是global物件的屬性。此外,所有原生引用型別建構函式,比如object和function,也都是global物件的屬性:

屬性說明

undefined

特殊值undefined

nan特殊值nan

infinity

特殊值infinity

object

object的建構函式

array

array的建構函式

function

function的建構函式

boolean

boolean的建構函式

string

string的建構函式

number

number的建構函式

date

date的建構函式

regexp

regexp的建構函式

symbol

symbol的偽建構函式

error

error的建構函式

evalerror

evalerror的建構函式

rangeerror

rangeerror的建構函式

referenceerror

referenceerror的建構函式

syntaxerror

syntaxerror的建構函式

typeerror

typeerror的建構函式

unierror

unierror的建構函式

(4)window物件

雖然ecma-262沒有規定直接訪問global物件的方式,但瀏覽器將window物件實現為global物件的**。因此所有全域性作用域中宣告的變數和函式都變成了window的屬性:

var color =

"red"

;function

saycolor()

window.

saycolor()

;//"red"

另一種獲取global物件的方式是使用如下的**:

let

global

=function()

();

這段**建立了乙個立即呼叫的函式表示式,返回了this的值。當乙個函式在沒有明確指定this值的情況下執行時,this值等於global物件。因此呼叫乙個簡單返回this的函式是在任何執行上下文中獲取global物件的通用方式。

ecmascript提供了math物件作為儲存數學公式、資訊和計算的地方。math物件提供了一些輔助計算的屬性和方法。

(1)math物件屬性

math物件有一些屬性,主要是儲存數學中的一些特殊值:

屬性說明

math.e

自然對數的基數e的值

math.ln10

10為底的自然對數

math.ln2

2為底的自然對數

math.log2e

以2為底e的對數

math.log10e

以10為底e的對數

math.pi

pi的值

math.sqrt1_2

1/2的平方根

math.sqrt2

2的平方根

(2)min()和max()方法

min()和max()方法用於確定一組數值中最小值和最大值。這兩個方法都接收任意多個引數:

let max = math.

max(3,

54,32,

16);console.

log(max)

;//54

let min = math.

max(3,

54,32,

16);console.

log(min)

;//3

在3、54、32、16中,math.max()返回54,math.min()返回3.

(3)捨入方法

接下來是用於把小數值捨入為整數的4個方法:math.ceil()、math.floor()、math.round()和math.fround()

(4)random()方法

math.random()方法返回0~1範圍內的隨機數,其中包含0但不包含1

python 物件導向 10 單例

單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!示例 class musicplayer object def new cls,args,kwargs 如果不返回任何結果,return super...

python物件導向學習筆記六 單例

設計模式 針對某一特定問題的套路,或者說是成熟的解決方案,前任工作的總結。類名 這位格式的方法為內建方法,new 為object基類提供的內建的靜態方法。new 方法的作用 在記憶體為物件分配空間 返回物件的引用。將引用傳給python直譯器後,會將引用作為物件的第乙個引數,傳給 init 方法,進...

物件導向(Python) 學習筆記之單例模式

單例設計模式的應用場景 站 物件 印表機 物件 重寫 new 方法的 非常固定 class musicplayer def new cls,args,kwargs 1.建立物件時,new方法會被自動呼叫 print 建立物件,分配空間 2.為物件分配空間 instance super new cls...