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

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

JavaScript中構造函數new操作符的理解

JavaScript中構造函數new操作符的理解

夏目祐太 2017-04-03 18:38:42
//?先一本正經的創建一個構造函數,其實該函數與普通函數并無區別 var?Person?=?function(name,?age)?{ ????this.name?=?name; ????this.age?=?age; ????this.getName?=?function()?{ ????????return?this.name; ????} } ??//?將構造函數以參數形式傳入 ??function?New(func)?{ ??????//?聲明一個中間對象,該對象為最終返回的實例 ??????var?res?=?{}; ??????if?(func.prototype?!==?null)?{ ??????????//?將實例的原型指向構造函數的原型 ??????????res.__proto__?=?func.prototype; ??????} ??????//?ret為構造函數執行的結果,這里通過apply,將構造函數內部的this指向修改為指向res,即為實例對象 ??????var?ret?=?func.apply(res,?Array.prototype.slice.call(arguments,?1)); ??????//?當我們在構造函數中明確指定了返回對象時,那么new的執行結果就是該返回對象 ??????if?((typeof?ret?===?"object"?||?typeof?ret?===?"function")?&&?ret?!==?null)?{ ??????????return?ret; ??????} ??????//?如果沒有明確指定返回對象,則默認返回res,這個res就是實例對象 ??????return?res; ??} ??//?通過new聲明創建實例,這里的p1,實際接收的正是new中返回的res ??var?p1?=?New(Person,?'tom',?20); ??console.log(p1.getName()); ??//?當然,這里也可以判斷出實例的類型了 ??console.log(p1?instanceof?Person);?//?true這種思路對嗎?
查看完整描述

目前暫無任何回答

  • 0 回答
  • 2 關注
  • 1603 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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