当前位置: 代码迷 >> JavaScript >> 使用Object.create()动态创建对象
  详细解决方案

使用Object.create()动态创建对象

热度:118   发布时间:2023-06-12 14:36:29.0

我有一个场景,需要动态创建对象。

在我的示例中,对象meta包含初始化Object.create()要使用的构造函数的名称。

目前,使用以下代码,我能够动态创建对象,但未定义属性name

我需要结果上的那个属性;

我的脚本有什么问题? 您知道达到相同结果的更好方法吗?

  (function () { var costructors = { A: function () { this.name = 'A'; console.log(this.name); }, B: function () { this.name = 'B'; console.log(this.name); }, C: function () { this.name = 'C'; console.log(this.name); } }, meta = { A: true, B: true, C: true, }, result = []; function createObjs() { Object.keys(meta).forEach(function (type) { var obj = Object.create(costructors[type].prototype); result.push(obj); }.bind(this)); } createObjs.call(this); console.log(result); })(); 

您尚未为任何构造函数定义原型,因此不会在实例中创建名称,因为您是从原型而不是构造函数创建对象的。 尝试

Object.create(constructors[type])

不使用Object.create的替代方法是:

var obj = new costructors[type]();

代替:

var obj = Object.create(costructors[type].prototype);

实际上, Object.create不会调用构造函数,而只会从给定的原型创建一个新对象。 可以通过属性对象提供任何成员变量:

var obj = Object.create(
  constructors[type].prototype,
  { 'name' : { value: 'A', writable: true}}
);
  相关解决方案