2017-12-20更新:
- 更新了以往表达不清楚的部分,为三个版本不同的地方添加上了注
释- 附上了图书版次信息以供查询
Javascript语言精粹
第3章 对象
原型
if (typeof Object.beget !== 'function'){ // 注意这里检查是否存在beget函数
Object.create = function(o) { // 而这里则是给Object添加了create方法
var F = function () {};
F.prototype = o;
return new F();
}
}
这个函数旨在为Object增加一个create方法,这个方法创建一个使用原对象作为其原型的新对象。
我不明白的是为什么检查beget是否是一个函数(即是否已经存在),而下面则没有用到beget函数(而是在Object上面添加了create方法?)
直接上结论:
这应该是一个印刷错误
这块应该是有两个版本:
- 这个是英文原版
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关键词,而是选择使用函数表达式的方法声明函数。
这里附上图书版次信息,以供遇到同样的朋友参考
Javacript语言精粹(Crockford,D.)
电子工业出版社 2012.9
ISBN: 978-7-121-17740-8
印次:2017.04 第13次印刷
感谢Brian Duncan回答了这部分关于new的相关问题。
另外,在javascript中,new关键字必须与函数一同工作。
例如
var a = new Array();
这里a是一个数组,typeof a == 'Object'
,而typeof Array == 'function'
;