javascript - 在文字对象上使用 Object.create 的奇怪行为和多个实例

标签 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() 函数的内容,我了解到它使用所使用的模型对象的“原型(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());

你的函数最终返回了这个。但这不是创建的对象,它仍然是可选择的。此外,您还可以在设置对象的 id 和类型之前克隆该对象。做:

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

关于javascript - 在文字对象上使用 Object.create 的奇怪行为和多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277503/

相关文章:

java - 无法在子类中创建返回类型为 Object 的方法

javascript - 如何在 JavaScript 中使用循环函数声明变量 x1、x2、...、x10?

javascript - typescript:如何从 2 个不同的对象集中获取具有相同属性值但不同键的对象

reactjs - 使用 Jest 确定两个对象是否具有相同的结构

php - 当 ajax 开始在后台运行时显示加载图像

javascript - 更改 Material ui 选项卡标签的颜色

javascript - Angular 的 $http 中返回的 Promise 与普通 Javascript (ES6) 中返回的 Promise 相同吗?

javascript - 将数据传递给 onclick 事件会取消字符串的大写

Java:什么时候使用属性,什么时候使用方法参数?

c++ - 如何在 C++ 中处理具有多个不同类型数据成员的类?