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

时间:2015-07-17 13:00:12

标签: javascript

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

在我的示例中,对象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);
        })();




3 个答案:

答案 0 :(得分:1)

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

Object.create(constructors[type])

答案 1 :(得分:1)

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

var obj = new costructors[type]();

而不是:

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

答案 2 :(得分:0)

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

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