Javascript用闭包实现领域建模

开篇,因工作试用期中需要做个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>

 

你可能感兴趣的:(JavaScript)