向Object()传递单个参数的目的

Purpose of passing a single argument to Object ()?

本文关键字:单个 参数 Object      更新时间:2023-09-26

对于上一个问题的回答是,将参数传递给Object的构造函数并将其作为函数使用的目的是什么,如以下代码所示?

function makeFoo(a, b) {
    var foo = Object.create(Foo.prototype);
    var result = Foo.apply(foo, arguments);
    return Object(result) === result ? result : foo;
}

如果对象已经是对象,则对象构造函数返回它的形参。因此,您的代码所做的是检查result值是否是一个对象。

在另一个问题的那个函数的上下文中,目标是处理这样一个事实,即"Foo"构造函数在非通过new调用时可能会尝试返回一个非对象(如字符串或其他东西)。当您使用new调用构造函数时,任何非对象显式返回值都将被忽略,并且返回值将是构造的对象。

所以最后一行"makeFoo"检查返回值是否已经是一个对象。如果是,那么Object构造函数将返回引用而不创建新对象,因此它将是===到参数("result")。如果它不是===,那么这意味着构造函数做了一些奇怪的事情,所以构造的"foo"实例将被返回。

请注意,另一个问题将此描述为"hack"。