您的位置:首页 > Web前端 > JavaScript

Javascript用闭包实现领域建模

2012-10-17 09:43 253 查看
开篇,因工作试用期中需要做个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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: