只有 3 行代码,但我无法完全掌握这一点:
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
newObject = Object.create(oldObject);
(来自原型继承)
Object.create()
首先创建一个名为F
. 我认为函数是一种对象。这个F
对象存储在哪里?在全球范围内,我猜。接下来我们
oldObject
传入的 aso
成为函数的原型F
。函数(即对象)F
现在从 our 中“继承”oldObject
,因为名称解析将通过它进行路由。很好,但我很好奇对象的默认原型是什么,对象?函数对象也是如此吗?最后,
F
被实例化并返回,成为我们的newObject
. 这里的new
操作是严格必要的吗?还没有F
提供我们需要的东西,或者功能对象和非功能对象之间是否存在关键区别?显然,使用这种技术不可能有一个构造函数。
下一次会发生什么Object.create()
?全局函数是否F
被覆盖?当然它不会被重用,因为这会改变以前配置的对象。如果多个线程调用会发生什么Object.create()
,是否有任何同步来防止竞争条件F
?