W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當(dāng)將 Function 作為函數(shù)來調(diào)用,而不是作為構(gòu)造器,它會創(chuàng)建并初始化一個新函數(shù)對象。所以函數(shù)調(diào)用 Function(…) 與用相同參數(shù)的 new Function(…) 表達式創(chuàng)建的對象相同。
當(dāng)以 p1, p2, … , pn, body 作為參數(shù)調(diào)用 Function 函數(shù)(這里的 n 可以是 0,也就是說沒有“p”參數(shù),這時還可以不提供 body),采用如下步驟:
當(dāng) Function 作為 new 表達式的一部分被調(diào)用時,它是一個構(gòu)造器:它初始化新創(chuàng)建的對象。
最后一個參數(shù)指定為函數(shù)的 body( 可執(zhí)行代碼 );之前的任何參數(shù)都指定為形式參數(shù)。
當(dāng)以 p1, p2, … , pn, body 作為參數(shù)調(diào)用 Function 構(gòu)造器(這里的 n 可以是 0,也就是說沒有“p”參數(shù),這時還可以不提供 body),采用如下步驟:
每個函數(shù)都會自動創(chuàng)建一個 prototype 屬性,用來支持函數(shù)被當(dāng)做構(gòu)造器使用的可能性。
為每個形參指定一個參數(shù)是允許的,但沒必要。例如以下三個表達式產(chǎn)生相同的結(jié)果:
new Function("a", "b", "c", "return a+b+c") new Function("a, b, c", "return a+b+c") new Function("a,b", "c", "return a+b+c")
Function 構(gòu)造器自身是個函數(shù)對象,它的 [[Class]] 是 "Function"。Function 構(gòu)造器的 [[Prototype]] 內(nèi)部屬性值是標(biāo)準(zhǔn)內(nèi)置 Function 的 prototype 對象 (15.3.4)。
Function 構(gòu)造器的 [[Extensible]] 內(nèi)部屬性值是 true.
Function 構(gòu)造器有如下屬性 :
Function.prototype 的初始值是標(biāo)準(zhǔn)內(nèi)置 Function 的 prototype 對象 (15.3.4)。
此屬性擁有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
這是個值為 1 的數(shù)據(jù)屬性。此屬性擁有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
Function 的 prototype 對象自身是一個函數(shù)對象 ( 它的 [[Class]] 是 "Function"),調(diào)用這個函數(shù)對象時,接受任何參數(shù)并返回 undefined。
Function 的 prototype 對象的 [[Prototype]] 內(nèi)部屬性值是標(biāo)準(zhǔn)內(nèi)置 Object 的 prototype 對象 (15.2.4)。Function 的 prototype 對象的 [[Extensible]] 內(nèi)部屬性的初始值是 true。
Function 的 prototype 對象自身沒有 valueOf 屬性 ; 但是,它從 Object 的 prototype 對象繼承了 valueOf 屬性。
Function 的 prototype 對象的 length 屬性是 0。
Function.prototype.constructor 的初始值是內(nèi)置 Function 構(gòu)造器。
此函數(shù)的返回值的表示是依賴于實現(xiàn)的。這個表示包含 FunctionDeclaration 的語法。特別注意,怎樣在這個字符串表示中使用和放置空白,行終結(jié)符,分號是依賴于實現(xiàn)的。
這個 toString 不是通用的;如果它的 this 值不是一個函數(shù)對象,它會拋出一個 TypeError 異常。因此,它不能當(dāng)做方法來轉(zhuǎn)移到其他類型的對象中。
當(dāng)以 thisArg 和 argArray 為參數(shù)在一個 func 對象上調(diào)用 apply 方法,采用如下步驟:
apply 方法的 length 屬性是 2。
在外面?zhèn)魅氲?thisArg 值會修改并成為 this 值。thisArg 是 undefined 或 null 時它會被替換成全局對象,所有其他值會被應(yīng)用 ToObject 并將結(jié)果作為 this 值,這是第三版引入的更改。
當(dāng)以 thisArg 和可選的 arg1, arg2 等等作為參數(shù)在一個 func 對象上調(diào)用 call 方法,采用如下步驟:
call 方法的 length 屬性是 1。
在外面?zhèn)魅氲?thisArg 值會修改并成為 this 值。thisArg 是 undefined 或 null 時它會被替換成全局對象,所有其他值會被應(yīng)用 ToObject 并將結(jié)果作為 this 值,這是第三版引入的更改。
bind 方法需要一個或更多參數(shù),thisArg 和(可選的)arg1, arg2, 等等,執(zhí)行如下步驟返回一個新函數(shù)對象:
bind 方法的 length 屬性是 1。
Function.prototype.bind 創(chuàng)建的函數(shù)對象不包含 prototype 屬性或 [[Code]], [[FormalParameters]], [[Scope]] 內(nèi)部屬性。
當(dāng)調(diào)用一個用 bind 函數(shù)創(chuàng)建的函數(shù)對象 F 的 [[Call]] 內(nèi)部方法,傳入一個 this 值和一個參數(shù)列表 ExtraArgs,采用如下步驟:
當(dāng)調(diào)用一個用 bind 函數(shù)創(chuàng)建的函數(shù)對象 F 的 [[Construct]] 內(nèi)部方法,傳入一個參數(shù)列表 ExtraArgs,采用如下步驟:
當(dāng)調(diào)用一個用 bind 函數(shù)創(chuàng)建的函數(shù)對象 F 的 [[Construct]] 內(nèi)部方法,并以 V 作為參數(shù),采用如下步驟:
除了必要的內(nèi)部屬性之外,每個函數(shù)實例還有一個 [[Call]] 內(nèi)部屬性并且在大多數(shù)情況下使用不同版本的 [[Get]] 內(nèi)部屬性。函數(shù)實例根據(jù)怎樣創(chuàng)建的(見 8.6.2 ,13.2, 15, 15.3.4.5)可能還有一個 [[HasInstance]] 內(nèi)部屬性 , 一個 [[Scope]] 內(nèi)部屬性 , 一個 [[Construct]] 內(nèi)部屬性 , 一個 [[FormalParameters]] 內(nèi)部屬性 , 一個 [[Code]] 內(nèi)部屬性 , 一個 [[TargetFunction]] 內(nèi)部屬性 , 一個 [[BoundThis]] 內(nèi)部屬性 , 一個 [[BoundArgs]] 內(nèi)部屬性。
[[Class]] 內(nèi)部屬性的值是 "Function"。
對應(yīng)于嚴(yán)格模式函數(shù) (13.2) 的函數(shù)實例和用 Function.prototype.bind 方法 (15.3.4.5) 創(chuàng)建的函數(shù)實例有名為“caller”和 “arguments”的屬性時,拋出一個 TypeError 異常。一個 ECMAScript 實現(xiàn)不得為在嚴(yán)格模式函數(shù)代碼里訪問這些屬性關(guān)聯(lián)任何依賴實現(xiàn)的特定行為。
length 屬性值是個整數(shù),它指出函數(shù)預(yù)期的“一般的”參數(shù)個數(shù)。然而,語言允許用其他數(shù)量的參數(shù)來調(diào)用函數(shù)。當(dāng)以與函數(shù)的 length 屬性指定的數(shù)量不同的參數(shù)個數(shù)調(diào)用函數(shù)時,它的行為依賴于函數(shù)自身。這個屬性擁有特性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。
prototype 屬性的值用于初始化一個新創(chuàng)建對象的的 [[Prototype]] 內(nèi)部屬性,為了這個新創(chuàng)建對象要先將函數(shù)對象作為構(gòu)造器調(diào)用。這個屬性擁有特性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }。
用 Function.prototype.bind 創(chuàng)建的函數(shù)對象沒有 prototype 屬性。
設(shè) F 是個函數(shù)對象。
當(dāng)以 V 作為參數(shù)調(diào)用 F 的 [[HasInstance]] 內(nèi)部方法,采用如下步驟:
用 Function.prototype.bind 創(chuàng)建的函數(shù)對象擁有的不同的 [[HasInstance]] 實現(xiàn),在 15.3.4.5.3 中定義。
函數(shù)對象與其他原生 EMACScript 對象 (8.12.3) 用不同的 [[Get]] 內(nèi)部方法。
設(shè) F 是一個函數(shù)對象,當(dāng)以屬性名 P 調(diào)用 F 的 [[Get]] 內(nèi)部方法 , 采用如下步驟:
用 Function.prototype.bind 創(chuàng)建的函數(shù)對象使用默認(rèn)的 [[Get]] 內(nèi)部方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: