在不使用object.Create的情况下创建具有null原型的javascript对象

Create javascript object with null prototype without using Object.create

本文关键字:null 原型 对象 javascript 创建 情况下 object Create      更新时间:2023-12-17

我需要找到一种方法来创建一个带有null原型的JavaScript对象。

我不被允许使用Object.create函数。

我尝试实例化像new Constructor()这样的构造函数,但返回的对象总是有一个非null原型,即使是Constructor.prototype === null

这样的对象已经存在,它是Object.prototype,所以您的代码就像一样简单

x = Object.prototype

但是您不能创建这样的新对象,因为new总是将proto设置为对象:

如果Type(proto)不是Object,请将obj的[[Prototype]]内部属性设置为15.2.4中所述的标准内置Object原型对象。@http://ecma-international.org/ecma-262/5.1/#sec-13.2.2

您可以直接操作__proto__

a = {}
a.__proto__ = null
var a = {};
a.prototype = null;
alert(a.prototype);

创建一个从另一个对象继承而不使用Object.create的对象的常用方法是用所需的prototype实例化一个函数。然而,正如您所说,它不适用于null:

function Null() {}
Null.prototype = null;
var object = new Null();
console.log(Object.getPrototypeOf(object) === null); // false :(

但幸运的是,ECMAScript 6引入了类。上面的方法也不会直接起作用,因为ES6类的prototype属性是不可配置和不可写的。

但是,您可以利用ES6类可以扩展null这一事实。然后,不进行实例化,只获取类的prototype

var object = (class extends null {}).prototype;
delete object.constructor;
console.log(Object.getPrototypeOf(object) === null); // true :)