OLOO模式澄清

时间:2015-10-29 21:02:44

标签: javascript

我还在学习,但最近改变了我想参与网络开发的领域。编程对我来说并不是什么新鲜事,但我从来没有真正看过两次javascript。

我正在努力学习,但我对javascript中使用的不同继承模式感到困惑。我查看了经典原型链,其中.prototype引用由程序员设置(我认为这通常被称为原型模式)。 然后我读了很多关于OLOO的博客和文章及其在简单方面的优势。

所以我尝试自己编写一些小样本,在研究一个好的方法时,我想出了一段我不能真正投入到这两个类别中的代码。

如果有人想看一眼,我就做了一个小提琴: http://jsfiddle.net/HB7LU/19377/

对于其他任何人来说,这基本上都是我的代码:

function Parent() {
    return {
        array: [],

        add: function(element) {
            this.array.push(element + this.array.length.toString());
        },

        getAll: function() {
            return this.array;
        },
    };
};

function Child() {
    return Object.assign(Parent(), {

        removeAllButOne: function() {
            this.array.splice(1);
        }
    });
};

foo = Parent();
foo.add('foo');

bar = Child();
bar.add('bar');

foo.add('foo');
bar.add('bar');
bar.removeAllButOne();

希望有人可以澄清我在这里所做的是什么以及使用这种方法我会面临什么样的缺点。我知道它不能是OLOO,因为OLOO依赖于一个简单的Object.create(...); 创建新对象。

编辑:小提琴链接被打破,抱歉

1 个答案:

答案 0 :(得分:6)

你在做什么有点像混合模式。您正在创建一个新的Parent对象,然后将其部分合并到Child对象中,这是mixin背后的一种想法。

以下是关于mixins的一些参考资料:

A Fresh Look at Javascript Mixins

The Mixin Pattern

JavaScript Mixins: Beyond Simple Object ExtensionPosted

以下是您正在做的事情的一些缺点:

  1. 您创建一个Parent实例,从中复制,然后将其丢弃。
  2. Parent.prototype上的任何方法都不会被继承
  3. instanceof Parent将不受支持
  4. instanceof Child将不受支持
  5. Object.assign()只复制可枚举的自有属性,因此它不会复制Parent对象的整个状态,因此只有当您明确知道父对象没有时才能在这种情况下使用它有任何不会被复制的东西。