【问题标题】:Are all objects instances of the (Object) constructor?所有对象都是 (Object) 构造函数的实例吗?
【发布时间】:2017-08-12 11:06:41
【问题描述】:

所有 javascript 对象都是 (Object) 构造函数的实例吗?

是否可以在创建对象的同时不创建 (Object) 的实例,或者此构造函数是否是所有对象都是其实例的通用构造函数?

【问题讨论】:

    标签: javascript oop


    【解决方案1】:

    您可以使用特殊的null 值创建一个没有原型的对象。

    null 的类型是 'object',但它也没有原型,所以在某种程度上它已经可以作为一个 对象而不是 instanceof Object

    但我们不得不承认它是一个糟糕的候选对象,因为除了它的类型之外,它并不是一个真正的对象(例如,我们不能向它添加任何属性)。

    然而,正如第一句话所说,我们可以使用它来创建一个不是instanceof Object的对象,这要归功于Object.create()方法:

    var o = Object.create(null); // use null has prototype
    console.log(o);
    console.log('instanceof Object:', o instanceof Object); // false;
    
    o.isAnObject = true;
    console.log('can have own properties:', o.isAnObject); // true;

    【讨论】:

    • 那么作为一个对象并不一定让它成为一个instanceof(Object)?
    • @NoOne 好吧,不。 instanceof 检查原型链。 Object.create(null) 创建一个以null 为原型的对象,所以instanceof 将返回false。但还要注意,它没有任何 Object 的方法(如 toString()),因此您可能不想在实际代码中这样做。
    猜你喜欢
    • 2017-09-23
    • 2020-05-03
    • 2013-08-20
    • 1970-01-01
    • 2015-09-19
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多