在文字对象

时间:2016-09-01 17:22:49

标签: javascript oop javascript-objects

我在JS学习oop,我知道"正确的方式"要做多个实例对象正在使用var object = function(){},但在我学习的过程中,我正在做不同的事情来学习JS的工作方式。 我会切断追逐,隐藏与此问题无关的代码。

问题是,如果我使用以下代码,当我创建Selectable对象的两个实例时,我在两个实例中都获得相同的id属性。

var Selectable = {
     create: function(type) {
        Object.create(this);
        this.type = type;
        this.id =  Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 5);

        return this;
    }
};

但是,如果我这样做:

var Selectable = {
    create: function(type) {
        var _T = Object.create(this);
        this.type = type;
        this.id =  Math.random().toString(36).replace(/[^a-z]+/g, '').substring(0, 5);

        return Object.create(_T);
    }
};

他们获得不同的id属性。 我读过有关Object.create()函数的内容,我学到的是它使用"原型"创建了一个新对象。使用的模型对象。但是当我在一行中使用两个Object.create()函数创建一个对象时,为什么会这样呢?

1 个答案:

答案 0 :(得分:0)

var Selectable = { 
create: function(type) { 
Object.create(this); 
this.type = type; 
this.id = Math.random().toString(36).replace([^a-z]+/g, '').substring(0, 5);
 return this; 
} 
};

alert(selectable.create());

您的功能最终返回此。但这不是创建的对象,它仍然是可选择的。您也可以在设置其ID和类型之前克隆该对象。做:

var selectable={
create:function(type){
obj=Object.create(this);
obj.type=type;
obj.id=whatever;
return obj;
};
}