在对this previous question的回答中,根据以下代码,将参数传递给Object
构造函数,将其作为函数使用是什么目的?
function makeFoo(a, b) {
var foo = Object.create(Foo.prototype);
var result = Foo.apply(foo, arguments);
return Object(result) === result ? result : foo;
}
答案 0 :(得分:3)
如果Object构造函数已经是对象,则返回其参数。因此,您的代码正在检查result
值是否为对象。
在另一个问题的该函数的上下文中,目标是处理“Foo”构造函数在调用而不是通过{{}时尝试返回非对象(如字符串或其他内容)的事实。 1}}。当您使用new
调用构造函数时,将忽略任何非对象显式返回值,并且返回值将是构造对象。
这样“makeFoo”的最后一行检查返回的值是否已经是一个对象。如果是,则Object构造函数将返回引用而不创建新对象,因此它将是new
参数(“result”)。如果它不是===
,那么这意味着构造函数做了一些奇怪的事情,因此将返回构造的“foo”实例。
请注意,另一个问题将此描述为“黑客”。