我需要找到一种使用null
原型创建JavaScript对象的方法。
我不允许使用Object.create
功能。
我尝试实例化new Constructor()
之类的构造函数,但返回的对象总是有一个非null
原型,即使是Constructor.prototype === null
。
答案 0 :(得分:3)
这样的对象已经存在,它是Object.prototype
,因此您的代码就像
x = Object.prototype
但你不能像这样创建一个新对象,因为new
总是将proto设置为一个对象:
如果Type(proto)不是Object,则将obj的[[Prototype]]内部属性设置为标准内置Object原型对象,如15.2.4中所述。 @ http://ecma-international.org/ecma-262/5.1/#sec-13.2.2
您可以直接操纵__proto__
a = {}
a.__proto__ = null
答案 1 :(得分:1)
var a = {};
a.prototype = null;
alert(a.prototype);
答案 2 :(得分:0)
创建一个继承自另一个没有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 :)