Javascript 在文字对象上使用Object.create时出现奇怪的行为和多个实例

Javascript 在文字对象上使用Object.create时出现奇怪的行为和多个实例,javascript,oop,javascript-objects,Javascript,Oop,Javascript Objects,我正在学习JS中的oop,我知道处理多个实例对象的“正确方法”是使用var object=function(){},但在学习的同时,我正在做不同的事情来了解JS的工作原理。 我将缩减话题,隐藏一段与这个问题无关的代码 问题是,如果我使用下面的代码,当我创建可选对象的两个实例时,我在这两个实例中得到相同的id属性 var Selectable = { create: function(type) { Object.create(this); this.ty

我正在学习JS中的oop,我知道处理多个实例对象的“正确方法”是使用
var object=function(){}
,但在学习的同时,我正在做不同的事情来了解JS的工作原理。 我将缩减话题,隐藏一段与这个问题无关的代码

问题是,如果我使用下面的代码,当我创建可选对象的两个实例时,我在这两个实例中得到相同的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()函数创建一个对象时,为什么会这样呢

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;
};
}
您的函数最终返回该值。但这不是创建的对象,它仍然是可选的。在设置对象的id和类型之前,还可以克隆对象。做:

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

create()返回一个新对象。Do obj=Object.create(这个);返回obj;create()返回一个新对象。Do obj=Object.create(这个);返回obj;哦,我明白了。它返回的是可选择的“模型”本身,而不是对象的新实例。谢谢你,伙计!:)顺便问一下,使用这样的文本对象来创建多个实例对象有多“错误”?你能建议我继续使用var class=function(){}的原型吗?@Rodrigo Casanova:通过你的代码片段,你可以选择。create().create().create()非常有用。哦,我明白了。它返回的是可选择的“模型”本身,而不是对象的新实例。谢谢你,伙计!:)顺便问一下,使用这样的文本对象来创建多个实例对象有多“错误”?您能建议我坚持使用原型方式var class=function(){}吗?@Rodrigo Casanova:使用您的代码片段,您可以执行可选的操作。create().create().create()非常有用。