看看这个截图:
有一个带有transformMap ()方法的转换器。此方法调用变换器的另外两个方法:transformMapHead()和transformMapBody()
变压器
var transformator =
{
transformMap: function(tree) {
return transformator.transformMapHead(tree)
+transformator.transformMapBody(tree.body[0].body) +"}\n";
},
transformMapHead: function(tree) {
return "to be done";
},
transformMapBody: function(tree) {
// completly implemented
},
...
};
好的,到目前为止还不错。transformMapBody() - 方法已完全实现,而transformMapHead () - 方法没有,这将在子对象中完成。
现在,让我们看一个更具体的转换器。这里我只想实现transformMapHead()方法。
但是,当我实施
混凝土转换器
var concreteTransformator = Object.beget(transformator);
concreteTransformator.transformMapHead = function(tree)
{
// my business logic
console.log("i am the new business logic");
};
它不能正常工作。不是从concreteTransformator对象运行transformMapHead()方法,而是执行第一个transformator对象的方法并打印出“待完成”。
我可以通过将transformMap() - 方法从transformer-object 复制到concreteTransformer -object 来避免这种情况:
concreteTransformator.transformMap = function(tree) {
return concreteTransformator.transformMapHead(tree)
+concreteTransformator.transformMapBody(tree.body[0].body) +"}\n";
};
然后,一切都运行良好,但这不是要走的路吗?!
最后,来自 Douglas Crockford 的 beget-helper-function:
if (typeof Object.beget !== 'function') {
Object.beget = function(o) {
var F = function() {};
F.prototype = o;
return new F();
};
}