Javascript用闭包实现领域建模
2012-10-17 09:43 秋日愚夫 阅读(283) 评论(0) 编辑 收藏 举报开篇,因工作试用期中需要做个javascript树的练习,在此过程中发现自己此方面知识较少。于是做了点功课。
了解了javascript是弱类型语言。无块级作用域。原型继承。闭包。危险的全局变量。等知识。。也渐渐喜欢上了其原型继承的方式。
昨天在看一本html5+css3书的时候,看到一段关于绘制图形的javascript代码其中,有几句很有意思。
var context=getContextById('dd');
context.Width(100);
context.Hight(200);
context.MoveTo(200,200);
从此可以看得出 context通过一系列方法,操作同一个object.
这种构造上下文对象的方式,可以通过闭包来实现。按照自己的想法写一下其内部实现。
如下:
var context=function() {
var contextObj={width:0,hight:0};
return {
Width:function(width){ contextObj.width=width; return this;}
Hight:function(hight) { contextObj.hight=hight; return this}
}
}();
这样看起来,非常像领域建模中的领域模型。把某一业务类相关的操作,封装在一起,形成一个内聚的新对象。
通过这样的封装生成的对象,我们可以对其方法进行重写,而不影响其它实例对象。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript"> var a, b; var TestContext = function () { var contextObj = { width: 100, height: 100 }; return { width: function (width) { contextObj.width = width; return contextObj; }, hight: function (hight) { contextObj.height = hight; return contextObj; } }; }; a = TestContext().width(120); alert("a:" + a.width); b = TestContext().width(290); alert("b:" + b.width);
//此实例的width没有被 b 的修改掉。 alert("a:" + a.width);
</script> </head> <body> </body> </html>