JavaScript中的DSL元编程介绍


Posted in Javascript onMarch 15, 2015

在看JavaScript Template源码的时候,发现有一个很有意思的用法用来生成函数,想到这不就是元编程么?

JavaScript 元编程

 元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作。

JavaScript eval

 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

可以有下面的用法:
eval("x=10;y=20;document.write(x*y)")

当然这只是用来执行某个函数,只是这货性价比可低了,而且还容易出错。
 eval 函数应该尽可能地避免使用。

于是更好地方法是使用New Function()

使用New Function()和eval()的很大一个区别是,eval不仅仅是一个函数 ,

 eval() 计算一个字符串作为当前执行范围内JavaScript表达式,可以访问本地变量。 New Function() 解析存储在一个字符串转换成一个函数对象,然后可以调用的JavaScript代码。因为代码在一个单独的范围内运行,不能访问本地变量。

也就是说eval()会干扰到当前函数的作用域。。

JavaScript new Function()

 Function 构造器创建一个新的Function 对象. 在JavaScript中每个函数(function)实际是一个Function对象. 使用Function构造器生成的Function对象是在函数创建时被解析的。这比你使用函数声明(function)并在你的代码中调用低效,因为使用函数语句声明的function是跟其他语句一起解析的。

New Function() 相比之下会比较低效,而这也是当前情况下我们所能预知的。

一个简单的示例如下所示:

var add = new Function(['x', 'y'], 'return x + y');

new Function()会将字符串解析为函数。。然后我们可以通过apply来执行
Function.apply(null, args)

而这也是我在JavaScript Template中所看到的:
   new Function(

        tmpl.arg + ',tmpl',

        "var _e=tmpl.encode" + tmpl.helper + ",_s='" +

        str.replace(tmpl.regexp, tmpl.func) +

        "';return _s;"

    );

当然我们还有其他方法。
Javascript 相关文章推荐
javascript深入理解js闭包
Jul 03 Javascript
JavaScript中DOM详解
Apr 13 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
JavaScript中的ajax功能的概念和示例详解
Oct 17 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
js实现数字递增特效【仿支付宝我的财富】
May 05 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
Aug 30 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 #Javascript
Javascript中的arguments与重载介绍
Mar 15 #Javascript
JavaScript中的闭包介绍
Mar 15 #Javascript
Javascript中的匿名函数与封装介绍
Mar 15 #Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 #Javascript
Javascript中的apply()方法浅析
Mar 15 #Javascript
Javascript中的Callback方法浅析
Mar 15 #Javascript
You might like
PHP 第一节 php简介
2012/04/28 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
自荐信怎么写好
2013/11/11 职场文书
大专学生推荐信范文
2013/11/19 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
2014年教师节寄语
2014/04/03 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
导游词之无锡唐城
2019/12/12 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python