使用null原型创建javascript对象,而不使用Object.create

时间:2013-11-30 14:04:03

标签: javascript object prototype

我需要找到一种使用null原型创建JavaScript对象的方法。

我不允许使用Object.create功能。

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

3 个答案:

答案 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 :)