首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >凯尔·辛普森的OLOO模式与原型设计模式

凯尔·辛普森的OLOO模式与原型设计模式
EN

Stack Overflow用户
提问于 2015-04-22 13:05:50
回答 2查看 27.6K关注 0票数 115

Kyle Simpson的"OLOO (对象链接到其他对象)模式“与Prototype设计模式有何不同?除了通过某种具体指示“链接”(原型的行为)的东西来创造它,并澄清这里不存在“复制”(类的行为)之外,他的模式到底引入了什么?

下面是他的书"You‘t Know JS: this & Object Prototype“中的an example of Kyle's pattern

代码语言:javascript
复制
var Foo = {
    init: function(who) {
        this.me = who;
    },
    identify: function() {
        return "I am " + this.me;
    }
};

var Bar = Object.create(Foo);

Bar.speak = function() {
    alert("Hello, " + this.identify() + ".");
};

var b1 = Object.create(Bar);
b1.init("b1");
var b2 = Object.create(Bar);
b2.init("b2");

b1.speak(); // alerts: "Hello, I am b1."
b2.speak(); // alerts: "Hello, I am b2."
EN

回答 2

Stack Overflow用户

发布于 2015-11-06 11:29:52

@Marcus,就像你一样,我一直热衷于OLOO,也不喜欢你第一点中描述的不对称。我一直在尝试一种抽象概念,以使对称性回归。您可以创建一个替代Object.create()link()函数。使用时,您的代码可能如下所示...

代码语言:javascript
复制
var Point = {
    init  : function(x,y) {
        this.x = x;
        this.y = y;
    }
};


var Point3D = link(Point, {
    init: function(x,y,z) {
        Point.init.call(this, x, y);
        this.z = z;
    }
});

请记住,Object.create()还有第二个可以传入的参数。下面是利用第二个参数的链接函数。它还允许进行一些自定义配置...

代码语言:javascript
复制
function link(delegate, props, propsConfig) {
  props = props || {};
  propsConfig = propsConfig || {};

  var obj = {};
  Object.keys(props).forEach(function (key) {
    obj[key] = {
      value: props[key],
      enumerable: propsConfig.isEnumerable || true,
      writable: propsConfig.isWritable || true,
      configurable: propsConfig.isConfigurable || true
    };
  });

  return Object.create(delegate, obj);
}

当然,我认为@Kyle不会支持在Point3D对象中隐藏init()函数。;-)

票数 -1
EN

Stack Overflow用户

发布于 2015-11-06 14:59:59

有没有比“两个”对象更OLOO的方法..我的所有示例都由基本示例组成(参见OP的示例)。假设我们有以下对象,我们如何创建一个具有‘其他’三个属性的“第四个”对象呢?阿拉。

代码语言:javascript
复制
var Button = {
     init: function(name, cost) {
       this.buttonName = name;
       this.buttonCost = cost;
     }
}

var Shoe = {
     speed: 100
}

var Bike = {
     range: '4 miles'
}

这些对象是任意的,可以包含所有类型的行为。但要点是,我们有'n‘个对象,我们的新对象需要来自这三个对象的一些东西。

而不是给定的示例ala:

代码语言:javascript
复制
var newObj = Object.create(oneSingularObject);
    newObj.whatever..

但是,我们的newObject =(按钮,自行车,鞋)......

在OLOO中实现这一点的模式是什么?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29788181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档