TL; DR:
我们是否需要原型OO中的工厂/施工人员?我们可以做一个范例切换并完全删除它们吗?
BackStory:
我最近一直在玩JavaScript中的原型OO并发现在JavaScript中完成的99%的OO正在强制使用经典的OO模式.
我对原型OO的看法是它涉及两件事.方法(和静态数据)的静态原型和数据绑定.我们不需要工厂或建造者.
在JavaScript中,这些是包含函数和的对象文字Object.create.
这意味着我们可以将所有内容建模为静态蓝图/原型和数据绑定抽象,最好直接连接到文档样式的数据库中.即,从数据库中取出对象,并通过使用数据克隆原型来创建对象.这意味着没有构造函数逻辑,没有工厂,没有new.
示例代码:
一个伪示例是:
var Entity = Object.create(EventEmitter, {
    addComponent: {
        value: function _addComponent(component) {
            if (this[component.type] !== undefined) {
                this.removeComponent(this[component.type]);
            }
            _.each(_.functions(component), (function _bind(f) {
                component[f] = component[f].bind(this);
            }).bind(this));
            component.bindEvents();
            Object.defineProperty(this, component.type, {
                value: component,
                configurable: true
            });
            this.emit("component:add", this, component);
        }
    },
    removeComponent: {
        value: function _removeComponent(component) {
            component = component.type || component;
            delete this[component];
            this.emit("component:remove", this, component);
        }
    }
}
var entity = Object.create(Entity, toProperties(jsonStore.get(id)))
小解释:
特定代码很冗长,因为ES5很冗长. …
我正在通过执行以下操作来创建javascript对象:
function field(name,label){
        this.name = name
        this.label= label;
}
var a = new field("market","Mkt").
然后我分配给另一个对象.
object.newField = a;
第二种方法是直接创建新属性
object.2ndNewField = {
    name: "market2",
    label:"Mkt2"
}
我尝试读取其他功能中的对象.但是,当我对对象进行字符串化时,它们表现不一样.我创建的两个属性之间有什么区别?
顺便问一下这个对象有什么区别吗?
 object.2ndNewField = {
        "name": "market2",
        "label":"Mkt2
    }