【发布时间】:2017-08-12 11:06:41
【问题描述】:
所有 javascript 对象都是 (Object) 构造函数的实例吗?
是否可以在创建对象的同时不创建 (Object) 的实例,或者此构造函数是否是所有对象都是其实例的通用构造函数?
【问题讨论】:
标签: javascript oop
所有 javascript 对象都是 (Object) 构造函数的实例吗?
是否可以在创建对象的同时不创建 (Object) 的实例,或者此构造函数是否是所有对象都是其实例的通用构造函数?
【问题讨论】:
标签: javascript oop
您可以使用特殊的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.create(null) 创建一个以null 为原型的对象,所以instanceof 将返回false。但还要注意,它没有任何 Object 的方法(如 toString()),因此您可能不想在实际代码中这样做。