javascript - 為什么var obj = {}創(chuàng)建對(duì)象的方法里面不能用this.xxx來(lái)聲明屬性 ?
問(wèn)題描述
為什么var obj = {}創(chuàng)建對(duì)象的方法里面不能用this.xxx來(lái)聲明屬性 ?
如:
var person = { this.name = ’背鍋俠’;}
就會(huì)報(bào)錯(cuò).看了下它的構(gòu)造器也是Object啊.會(huì)什么會(huì)有這樣.另外問(wèn)下.json和對(duì)象有啥區(qū)別?
問(wèn)題解答
回答1:this的指向是未來(lái)不確定的調(diào)用者,跟作用域有關(guān)。誰(shuí)調(diào)用函數(shù),函數(shù)內(nèi)部的this就指向誰(shuí)。
function Person (name) { this._name = name;}var p1 = new Person(’sarah’);var p2 = new Person(’tom’);
以上使用 new 關(guān)鍵字調(diào)用 Person()函數(shù),并傳入一個(gè)字符串’sarah’,作為name的值。此時(shí),函數(shù)內(nèi)部 this 的指向就是p1。同理,另一個(gè)就指向p2。如果直接調(diào)用 Person(’sarah’) 方法,由于 Person()的作用域是全局作用域,那么內(nèi)部this就會(huì)指向window.
也就是說(shuō),this就是個(gè)替代品,指向的未來(lái)可能涉及的對(duì)象。它是不確定的。內(nèi)部定義的屬性指向也會(huì)隨之變化。
但是像題主所采用的對(duì)象字面量形式,屬性name的指向是確定的,它就是屬于person。題主定義的 person 對(duì)象就等于我這里的p1。
另外,如樓上所說(shuō),json就是一種數(shù)據(jù)格式啦。方便前后臺(tái)傳輸數(shù)據(jù)。
不知道說(shuō)清楚沒(méi)。。。新手作答。
回答2:對(duì)象字面量創(chuàng)建對(duì)象不是這么寫的吧右面的部份明顯是JSON 格式,只接受Key-Value 的形式
JSON和對(duì)象的區(qū)別 舉個(gè)栗子
var obj ={ 'you' : 'a good boy' }右面的部分就是你提到的JSON 不管是寫到.json 里 還是.js 里都一樣其實(shí)就是一種數(shù)據(jù)格式 就長(zhǎng)成這樣子
至于對(duì)象 萬(wàn)物都是對(duì)象嘛 對(duì)象是個(gè)比較抽象的說(shuō)法
構(gòu)造器都是.json ? 對(duì)啊 都是一種數(shù)據(jù)格式嘛
回答3:第一個(gè)問(wèn)題你得去問(wèn)Brendan Eich。 問(wèn)問(wèn)他為啥當(dāng)初JavaScript要這么設(shè)計(jì)。
至于第二個(gè)問(wèn)題,JSON是一種數(shù)據(jù)格式,而對(duì)象……就假定你說(shuō)的是JavaScript吧,對(duì)象是JavaScript的一種數(shù)據(jù)類型。
相關(guān)文章:
1. docker鏡像push報(bào)錯(cuò)2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. html5 - datatables 加載不出來(lái)數(shù)據(jù)。4. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題5. node.js - mongodb查找子對(duì)象的名稱為某個(gè)值的對(duì)象的方法6. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????7. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?8. html5和Flash對(duì)抗是什么情況?9. 測(cè)試自動(dòng)化html元素選擇器元素ID或DataAttribute [關(guān)閉]10. 前端 - @media query 使用出現(xiàn)的問(wèn)題?

網(wǎng)公網(wǎng)安備