2 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
正如我之前所說
Arguments對(duì)象確實(shí)是特殊的對(duì)象, 它就是這麼設(shè)計(jì)的
再次閱讀構(gòu)造Arguments對(duì)象的步驟
7. 調(diào)用內(nèi)部[[DefineOwnProperty]]方法 (也就是設(shè)置私有屬性方法)
調(diào)用參數(shù)為 ('length',{[[Value]]: len, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true})
這個(gè)對(duì)象的length是直接附上去的
可以這樣模擬這個(gè)過程
a = {} Object.defineProperty(a, 'length' ,{value : 0,writable : true ,enumerable : false ,configurable : true }) alert(a.length) alert(a.hasOwnProperty( 'length' )) |

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
沒什麼特別的, Arguments Object就是這麼設(shè)計(jì)的
在ECMA-262.pdf 10.6有詳細(xì)說明它是怎麼構(gòu)造的
1. len = 參數(shù)的數(shù)量
2. obj = 新創(chuàng)建一個(gè)ECMAScript對(duì)象
..
4. 給obj的內(nèi)部[[Class]]屬性設(shè)置為 'Arguments'
這個(gè)你可以通過alert({}.toString.call(arguments))查看
..
7. 調(diào)用內(nèi)部[[DefineOwnProperty]]方法 (也就是設(shè)置私有屬性方法)
調(diào)用參數(shù)為 ('length',{[[Value]]: len, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true})
..
...
這就表明length是單純的直接賦值給Arguments Object的, 沒有什麼神秘的
你自己new Object, 沒有給它設(shè)置length屬性當(dāng)然沒有了
添加回答
舉報(bào)