亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于對象的constructor屬性

關于對象的constructor屬性

comlejade 2015-11-30 11:25:49
function?Person(name,age,job){ ??this.name?=?name; ??this.age?=?age; ??this.job?=?job; ??this.sayName?=?function(){ ????console.log(this.name); ??}; }; var?person1?=?new?Person("Ray",25,"Engineer"); person1.constructor;????//Person(name,?age,?job) person1.constructor?===?Person;???//true person1.constructor?===?Person(name,?age,?job);??//false那個person1.constructor輸出的明明是Person(name, age, job);為什么person1.constructor === Person(name, age, job);返回的是false?那個Object也是一樣:var?person2?=?new?Object(); person2.constructor;?????//Object() person2.constructor?===?Object();????//false person2.constructor?===?Object;???????//true這個搞得我有點暈了。。。
查看完整描述

3 回答

?
慕婉清01272

TA貢獻1條經驗 獲得超0個贊

實例person1的構造函數和你后來手寫的Person不是同一個內存空間,比如你爸叫李剛,不能所有的李剛都是你爸吧?
查看完整回答
反對 回復 2019-07-10
?
pardon110

TA貢獻1038條經驗 獲得超227個贊

注意person1.constructor指向的是實例person1的構造函數,準確的說是function Person(name,age,job){}是,函數聲明。

查看完整回答
反對 回復 2015-11-30
  • comlejade
    comlejade
    那為什么瀏覽器會返回那樣的東東。。。
  • pardon110
    pardon110
    這樣講,你可能明白點。由于js函數可以存儲在變量中。形如var a = function (){....}。為了便于識別,使用console.log(a)打印出來的是function(),只是為了告訴你變量a是一個匿名函數的引用。同理person1.constructor指向構造函數,你打印自然是Person(name, age, job),表明它指向的是一個名為Person的函數,有三個參數。 簡單點,打印變量如果輸出是類似這a()這樣,像其它語言中函數調用的形式,則表明你打印的變量是一個函數變量。而并非是表示立即調用執行的函數。換句話使用打印出來的a()值與你在js中直接寫的a()是有本質的區別,前者只能說是函數聲明,是一個類表達式的東西。后者則是函數的調用。即回到原點:function a(){...}與a()是否全等?! 建議查閱js中函數表達式與函數的區別,更深入一點的,你可能還要看執行環境,變量對象及活動對象相關的資料。
?
comlejade

TA貢獻2條經驗 獲得超0個贊

565bd1510001e3a105000359.jpg

565bd1510001897105000237.jpg


在不同的控制臺中顯示的是不一樣的哈,chrome返回的是那個函數,而firebar返回的是那個Person(name,age,job);如果是按chrome那個就好理解了,但是那個firebar為什么會出現那種情況?


查看完整回答
反對 回復 2015-11-30
  • 3 回答
  • 0 關注
  • 1875 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號