【发布时间】:2013-10-04 18:37:59
【问题描述】:
对于这个问题,我不希望有解决方案来解决问题,但希望更好地理解问题..
规范中的一些引用:
-
5.1 版 (Link)
§15.2.3.5 Object.create(O [,属性])
create 函数创建一个具有指定原型的新对象。调用create函数时,会采取以下步骤:
- 如果 Type(O) 不是 Object 或 Null,则抛出 TypeError 异常。
- 让 obj 成为创建新对象的结果,就像通过表达式 new Object() 一样,其中 Object 是具有该名称的标准内置构造函数
- 将obj的[[Prototype]]内部属性设置为O。
- 如果参数 Properties 存在且未定义,则向 obj 添加自己的属性,就像通过使用参数 obj 和 Properties 调用标准内置函数 Object.defineProperties 一样。
- 返回对象。
-
第 6 版 - 草稿 (Link)
§19.1.3.2 Object.create (O [, Properties])
create 函数创建一个具有指定原型的新对象。调用create函数时,会采取以下步骤:
- 如果 Type(O) 不是 Object 或 Null,则抛出 TypeError 异常。
- 令 obj 为带有参数 O 的抽象操作 ObjectCreate 的结果。
- 如果参数属性存在且未定义,则 一种。返回抽象操作 ObjectDefineProperties(obj, Properties) 的结果。
- 返回对象。
- 如果 Type(O) 不是 Object 或 Null,则抛出 TypeError 异常。
如果我理解正确,这两个规范都允许执行以下代码:
function F() {
}
var x=Object.create(F);
// a minimal test
alert(x.prototype.constructor===F); // true
alert(x instanceof Function) // true
alert(typeof x) // 'object'
似乎它创建了一个类型的对象,该类型派生自 (对不起,糟糕的术语......)Function,正如我在 FireFox 中测试的那样,所以x 是不可调用的:
x(); // x is not a function
我在想为什么不禁止将构造函数用作O,或者只创建一个有效的构造函数。
所以我想知道您希望 Object.create 对构造函数做什么?
【问题讨论】:
-
我希望
Object.create忽略它是否是构造函数,因为该算法不需要可调用对象。因为它返回一个简单的Object,我也希望结果是不可调用的。 -
赏金有什么用?是否还有未解决的问题?您希望答案更详细吗?
-
当两个投票数相同时,很难选择一个标记为已接受的答案。
标签: javascript