WEB开发网
开发学院网页设计JavaScript javascript设计模式交流(2) 阅读

javascript设计模式交流(2)

 2010-09-14 13:17:16 来源:WEB开发网   
核心提示: 动态语言特性·eval与解释器模式js的另一个非常有趣特点是它本身是一门解释型语言,它允许用eval和Function等方式调用其本身的解释器引擎,javascript设计模式交流(2)(6),这样给解释器的实现带来了很大的方便,可以将某段自定义语言(如代数运算或者布尔运算不

动态语言特性·eval与解释器模式

js的另一个非常有趣特点是它本身是一门解释型语言,它允许用eval和Function等方式调用其本身的解释器引擎,这样给解释器的实现带来了很大的方便,可以将某段自定义语言(如代数运算或者布尔运算不分)作为一个独立的token用eval直接执行,这种形式的解释器是静态语言无法比拟的

组合模式是一种应用广泛的模式,在web开发中更是大量使用,Silverlight的很多对象都有Group机制,即是组合模式的典型应用。

组合模式常常被误解为树型结构或者集合,请体会下面两种关系:

一个几何图形是几何图形,几个几何图形的组合仍然是几何图形

一个人是人,但几个人的集合不是人

组合模式适合的正是前者所描述的情形:总体和个体实现了同一个接口。

对任何语言来说,实现组合模式都不是很困难的事。对js来说,组合模式的实现又有很多有趣的特点和方法.

functional组合模式·函数组合

将2个函数组合为一个函数是一个很容易想到的行为,但极少数语言提供这种机制。表面上看js并未提供这种机制,但是实际上只需要给函数添加一个原型方法,就能轻松实现将几个函数组合成一个(剽窃自月影):

Function.prototype.concat=function()
{
  varfuncs=[this].concat(Array.apply([],arguments));
  
  returnfunction(){
    varret=[];
    for(vari=0;i<funcs.length;i++)
    {
      varfunc=funcs[i]instanceofFunction?funcs[i]:newFunction(funcs[i]);
      ret.push(func.apply(this,arguments));
    }
    returnret;
  }
}
/*
//用下面代码测试效果
vara=newFunction("return0");
a=a.concat(function(){return1},function(){return2},function(){return3});
alert(a());
*/

http://blog.csdn.net/onlyzhangqin/archive/2008/05/27/2486580.aspx

上一页  1 2 3 4 5 6 

Tags:javascript 设计模式 交流

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接