第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么普通對(duì)象沒有l(wèi)ength屬性,而唯獨(dú)arguments等類數(shù)組對(duì)象擁有l(wèi)ength屬性?

為什么普通對(duì)象沒有l(wèi)ength屬性,而唯獨(dú)arguments等類數(shù)組對(duì)象擁有l(wèi)ength屬性?

桃花長(zhǎng)相依 2022-01-05 23:19:35
為什么普通對(duì)象沒有l(wèi)ength屬性,而唯獨(dú)arguments等類數(shù)組對(duì)象擁有l(wèi)ength屬性?以下是我還疑惑的地方:現(xiàn)在才知道:原來所有的我所認(rèn)為的類(string等)其實(shí)都不過是構(gòu)造函數(shù),因?yàn)槭呛瘮?shù)所以都繼承Function.prototype;原來函數(shù)都具有l(wèi)ength和prototype屬性,且length屬性只示自身,其原型屬性并沒有。關(guān)于原型鏈,我有研究過的,查找屬性是沿著原型鏈;類比過作用域鏈,查找變量是沿著作用域鏈的。關(guān)于我提出的問題,結(jié)合你提供的信息,我對(duì)其的解釋是:因?yàn)槠胀ǖ膶?shí)例化一個(gè)對(duì)象,他們也就繼承自O(shè)bject.prototype原型的屬性和方法,而繼承的原型對(duì)象是沒有l(wèi)ength屬性的,所以使用length屬性的結(jié)果就是undefined。對(duì)于arguments對(duì)象,我還是有點(diǎn)疑惑:alert(typeof arguments); // object ---->這說明他是object 而不是 function alert(Object.getPrototypeOf(arguments)); //[object Object] ---->結(jié)合上面的結(jié)果object,說明:arguments所繼承的原型是Object.prototype,而Object.prototype是沒有定義length屬性的,所以length屬性是arguments這個(gè)對(duì)象所特有的??是ECMAscript標(biāo)準(zhǔn)里面定義好的??因?yàn)橥瑯邮菍?duì)象,如 var obj={x:'hello',y:'boy'} ,同樣繼承Object.prototype原型對(duì)象,但是他們卻沒有l(wèi)ength這樣的自有屬性。
查看完整描述

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'))


查看完整回答
反對(duì) 回復(fù) 2022-01-09
?
三國(guó)紛爭(zhēng)

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)然沒有了



查看完整回答
反對(duì) 回復(fù) 2022-01-09
  • 2 回答
  • 0 關(guān)注
  • 390 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)