2017-12-20更新:
- 更新了以往表達不清楚的部分瓶逃,為三個版本不同的地方添加上了注
釋- 附上了圖書版次信息以供查詢
Javascript語言精粹
第3章 對象
原型
if (typeof Object.beget !== 'function'){ // 注意這里檢查是否存在beget函數(shù)
Object.create = function(o) { // 而這里則是給Object添加了create方法
var F = function () {};
F.prototype = o;
return new F();
}
}
這個函數(shù)旨在為Object增加一個create方法,這個方法創(chuàng)建一個使用原對象作為其原型的新對象。
我不明白的是為什么檢查beget是否是一個函數(shù)(即是否已經(jīng)存在),而下面則沒有用到beget函數(shù)(而是在Object上面添加了create方法?)
直接上結(jié)論:
這應該是一個印刷錯誤
這塊應該是有兩個版本:
- 這個是英文原版
if( typeof Object.beget !== 'function' ){ // 注意這里是檢查beget是否存在
Object.beget = function(o){ // 而這里同樣是添加beget方法
var F =new Function(){};
F.prototype = o;
return new F();
}
}
- 這個是
Safari Books Online
上面的版本
if (typeof Object.create !== 'function') { // 注意這里檢查create方法是否存在
Object.create = function (o) { // 而這里是添加的create方法
var F = function () {};
F.prototype = o;
return new F();
};
}
注意:在此書新版本中祝峻,不推薦使用new關(guān)鍵詞,而是選擇使用函數(shù)表達式的方法聲明函數(shù)扎筒。
這里附上圖書版次信息,以供遇到同樣的朋友參考
Javacript語言精粹(Crockford,D.)
電子工業(yè)出版社 2012.9
ISBN: 978-7-121-17740-8
印次:2017.04 第13次印刷
感謝Brian Duncan回答了這部分關(guān)于new的相關(guān)問題莱找。
另外,在javascript中嗜桌,new關(guān)鍵字必須與函數(shù)一同工作奥溺。
例如
var a = new Array();
這里a是一個數(shù)組,typeof a == 'Object'
,而typeof Array == 'function'
;