Kyle Simpson的"OLOO (对象链接到其他对象)模式“与Prototype设计模式有何不同?除了通过某种具体指示“链接”(原型的行为)的东西来创造它,并澄清这里不存在“复制”(类的行为)之外,他的模式到底引入了什么?
下面是他的书"You‘t Know JS: this & Object Prototype“中的an example of Kyle's pattern:
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."
发布于 2015-11-06 11:29:52
@Marcus,就像你一样,我一直热衷于OLOO,也不喜欢你第一点中描述的不对称。我一直在尝试一种抽象概念,以使对称性回归。您可以创建一个替代Object.create()
的link()
函数。使用时,您的代码可能如下所示...
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()
还有第二个可以传入的参数。下面是利用第二个参数的链接函数。它还允许进行一些自定义配置...
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()
函数。;-)
发布于 2015-11-06 14:59:59
有没有比“两个”对象更OLOO的方法..我的所有示例都由基本示例组成(参见OP的示例)。假设我们有以下对象,我们如何创建一个具有‘其他’三个属性的“第四个”对象呢?阿拉。
var Button = {
init: function(name, cost) {
this.buttonName = name;
this.buttonCost = cost;
}
}
var Shoe = {
speed: 100
}
var Bike = {
range: '4 miles'
}
这些对象是任意的,可以包含所有类型的行为。但要点是,我们有'n‘个对象,我们的新对象需要来自这三个对象的一些东西。
而不是给定的示例ala:
var newObj = Object.create(oneSingularObject);
newObj.whatever..
但是,我们的newObject =(按钮,自行车,鞋)......
在OLOO中实现这一点的模式是什么?
https://stackoverflow.com/questions/29788181
复制相似问题