在文字对象上使用 Object.create 的奇怪行为和多个实例
Strange behavior and multiple instances using Object.create on literal objects
我正在学习 JS 中的 oop 并且我知道 "right way" 来执行多个实例对象正在使用 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() 函数,我了解到它使用所用模型对象的 "prototype" 创建了一个新对象。但是为什么当我连续使用两个 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());
您的函数终于完成了 return 这个。但这不是创建的对象,它仍然是可选的。您还可以在设置对象的 ID 和类型之前克隆该对象。做:
var selectable={
create:function(type){
obj=Object.create(this);
obj.type=type;
obj.id=whatever;
return obj;
};
}
我正在学习 JS 中的 oop 并且我知道 "right way" 来执行多个实例对象正在使用 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() 函数,我了解到它使用所用模型对象的 "prototype" 创建了一个新对象。但是为什么当我连续使用两个 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());
您的函数终于完成了 return 这个。但这不是创建的对象,它仍然是可选的。您还可以在设置对象的 ID 和类型之前克隆该对象。做:
var selectable={
create:function(type){
obj=Object.create(this);
obj.type=type;
obj.id=whatever;
return obj;
};
}