書本上說當(dāng)用new操作符實(shí)例化一個(gè)對(duì)象時(shí),大致流程可能是這樣的Function.method('new', function() { // 創(chuàng)建一個(gè)新對(duì)象, 它繼承自構(gòu)造器的原型對(duì)象
var that = Object.create(this.prototype); // 調(diào)用構(gòu)造器函數(shù),綁定 -this- 到新對(duì)象上
var other = this.apply(that, arguments); // 如果它返回的不一個(gè)對(duì)象,就返回該新對(duì)象
return (typeof other === 'object' && other) || that;
})這段代碼有兩處疑惑1、關(guān)于this的指向:書中講到 “使用構(gòu)造器函數(shù)存在一個(gè)嚴(yán)重的危害,如果你在調(diào)用構(gòu)造器函數(shù)時(shí)忘記了在前面加new前綴,那么this將不會(huì)綁定到一個(gè)新對(duì)象上。而是 全局對(duì)象?!焙苊黠@,上述new方法的第二段代碼就是講this綁定到新對(duì)象上,那么第二行代碼的this哪里來的?它原先指向哪里?難道這里的this是指向Function的?那么也就是說新對(duì)象的this指向它父類的構(gòu)造函數(shù)?2、最后一行代碼,為什么要這么寫?難道還存在other不是對(duì)象的情況嗎?
用new實(shí)例化一個(gè)對(duì)象時(shí),this指針的綁定--讀《JavaScript語(yǔ)言精粹》P47疑惑
德瑪西亞99
2018-08-30 09:10:20