国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

創(chuàng)建函數(shù)對(duì)象

2018-06-16 15:25 更新

 指定 FormalParameterList 為可選參數(shù)列表,指定 FunctionBody 為函數(shù)體,指定 Scope 為 詞法環(huán)境 ,Strict 為布爾標(biāo)記,按照如下步驟構(gòu)建函數(shù)對(duì)象:

  1. 創(chuàng)建一個(gè)新的 ECMAScript 原生對(duì)象,令 F 為此對(duì)象。
  2. 依照 8.12 描述設(shè)定 F 的除 [[Get]] 以外的所有內(nèi)部方法。
  3. 設(shè)定 F 的 [[Class]] 內(nèi)部屬性為 "Function"。
  4. 設(shè)定 F 的 [[Prototype]] 內(nèi)部屬性為 15.3.3.1 指定的標(biāo)準(zhǔn)內(nèi)置 Function 對(duì)象的 prototype 屬性。
  5. 依照 15.3.5.4 描述,設(shè)定 F 的 [[Get]] 內(nèi)部屬性。
  6. 依照 13.2.1 描述,設(shè)定 F 的 [[Call]] 內(nèi)部屬性。
  7. 依照 13.2.2 描述,設(shè)定 F 的 [[Construct]] 內(nèi)部屬性。
  8. 依照 15.3.5.3 描述,設(shè)定 F 的 [[HasInstance]] 內(nèi)部屬性。
  9. 設(shè)定 F 的 [[Scope]] 內(nèi)部屬性為 Scope 的值。
  10. 令 names 為一個(gè)列表容器,其中元素是以從左到右的文本順序?qū)?yīng) FormalParameterList 的標(biāo)識(shí)符的字符串。
  11. 設(shè)定 F 的 [[FormalParameters]] 內(nèi)部屬性為 names。
  12. 設(shè)定 F 的 [[Code]] 內(nèi)部屬性為 FunctionBody。
  13. 設(shè)定 F 的 [[Extensible]] 內(nèi)部屬性為 true。
  14. 令 len 為 FormalParameterList 指定的形式參數(shù)的個(gè)數(shù)。如果沒(méi)有指定參數(shù),則令 len 為 0。
  15. 以參數(shù) "length",屬性描述符 {[[Value]]: len, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false},false 調(diào)用 F 的 [[DefineOwnProperty]] 內(nèi)部方法。
  16. 令 proto 為仿佛使用 new Object() 表達(dá)式創(chuàng)建新對(duì)象的結(jié)果,其中 Object 是標(biāo)準(zhǔn)內(nèi)置構(gòu)造器名。
  17. 以參數(shù) "constructor", 屬性描述符 {[[Value]]: F, { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}, false 調(diào)用 proto 的 [[DefineOwnProperty]] 內(nèi)部方法。
  18. 以參數(shù) "prototype", 屬性描述符 {[[Value]]: proto, { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false}, false 調(diào)用 F 的 [[DefineOwnProperty]] 內(nèi)部方法。
  19. 如果 Strict 是 true,則令 thrower 為 [[ThrowTypeError]] 函數(shù)對(duì)象 (13.2.3)。以參數(shù) "caller", 屬性描述符 {[[Get]]: thrower, [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}, false 調(diào)用 F 的 [[DefineOwnProperty]] 內(nèi)部方法。以參數(shù) "caller", 屬性描述符 {[[Get]]: thrower, [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false}, false 調(diào)用 F 的 [[DefineOwnProperty]] 內(nèi)部方法。
  20. 返回 F。

 每個(gè)函數(shù)都會(huì)自動(dòng)創(chuàng)建一個(gè) prototype 屬性,以滿足函數(shù)會(huì)被當(dāng)作構(gòu)造器的可能性。

[[call]]

 當(dāng)用一個(gè) this 值,一個(gè)參數(shù)列表調(diào)用函數(shù)對(duì)象 F 的 [[Call]] 內(nèi)部方法,采用以下步驟:

  1. 用 F 的 [[FormalParameters]] 內(nèi)部屬性值,參數(shù)列表 args,10.4.3 描述的 this 值來(lái)建立 函數(shù)代碼 的一個(gè)新執(zhí)行環(huán)境,令 funcCtx 為其結(jié)果。
  2. 令 result 為 FunctionBody(也就是 F 的 [[Code]] 內(nèi)部屬性)解釋執(zhí)行的結(jié)果。如果 F 沒(méi)有 [[Code]] 內(nèi)部屬性或其值是空的 FunctionBody,則 result 是 (normal, undefined, empty)。
  3. 退出 funcCtx 執(zhí)行環(huán)境,恢復(fù)到之前的執(zhí)行環(huán)境。
  4. 如果 result.type 是 throw 則拋出 result.value。
  5. 如果 result.type 是 return 則返回 result.value。
  6. 否則 result.type 必定是 normal。返回 undefined。

[[Construct]]

 當(dāng)以一個(gè)可能的空的參數(shù)列表調(diào)用函數(shù)對(duì)象 F 的 [[Construct]] 內(nèi)部方法,采用以下步驟:

  1. 令 obj 為新創(chuàng)建的 ECMAScript 原生對(duì)象。
  2. 依照 8.12 設(shè)定 obj 的所有內(nèi)部方法。
  3. 設(shè)定 obj 的 [[Class]] 內(nèi)部方法為 "Object"。
  4. 設(shè)定 obj 的 [[Extensible]] 內(nèi)部方法為 true。
  5. 令 proto 為以參數(shù) "prototype" 調(diào)用 F 的 [[Get]] 內(nèi)部屬性的值。
  6. 如果 Type(proto) 是 Object,設(shè)定 obj 的 [[Prototype]] 內(nèi)部屬性為 proto。
  7. 如果 Type(proto) 不是 Object,設(shè)定 obj 的 [[Prototype]] 內(nèi)部屬性為 15.2.4 描述的標(biāo)準(zhǔn)內(nèi)置的 Object 的 prototype 對(duì)象。
  8. 以 obj 為 this 值,調(diào)用 [[Construct]] 的參數(shù)列表為 args,調(diào)用 F 的 [[Call]] 內(nèi)部屬性,令 result 為調(diào)用結(jié)果。
  9. 如果 Type(result) 是 Object,則返回 result。
  10. 返回 obj

[[ThrowTypeError]] 函數(shù)對(duì)象

 [[ThrowTypeError]] 對(duì)象是個(gè)唯一的函數(shù)對(duì)象,如下只定義一次:

  1. 創(chuàng)建一個(gè)新 ECMAScript 原生對(duì)象,令 F 為此對(duì)象。
  2. 依照 8.12 設(shè)定 F 的所有內(nèi)部屬性。
  3. 設(shè)定 F 的 [[Class]] 內(nèi)部屬性為 "Function"。
  4. 設(shè)定 F 的 [[Prototype]] 內(nèi)部屬性為 15.3.3.1 指定的標(biāo)準(zhǔn)內(nèi)置 Function 的 prototype 對(duì)象。
  5. 依照 13.2.1 描述設(shè)定 F 的 [[Call]] 內(nèi)部屬性。
  6. 設(shè)定 F 的 [[Scope]] 內(nèi)部屬性為 全局環(huán)境 。
  7. 設(shè)定 F 的 [[FormalParameters]] 內(nèi)部屬性為一個(gè)空 列表 。
  8. 設(shè)定 F 的 [[Code]] 內(nèi)部屬性為一個(gè) FunctionBody,它無(wú)條件拋出一個(gè) TypeError 異常,不做其他事情。
  9. 以參數(shù) "length", 屬性描述符 {[[Value]]: 0, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}, false 調(diào)用 F 的 [[DefineOwnProperty]] 內(nèi)部方法。
  10. 設(shè)定 F 的 [[Extensible]] 內(nèi)部屬性為 false。
  11. 令 [[ThrowTypeError]] 為 F。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)