标签:
eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码
如下例子
<a class="click" data-click="first">firstClick<a> //点击后执行函数firstClick
<a class="click" data-click="second">secondClick<a>//点击后执行函数secondClick
<a class="click" data-click="third">thirdClick<a>//点击后执行thirdClick
如果直接实现功能的话,需要绑定三个click,或者是各种判断,分别实现如下:
直接实现
$("[data-click=first]").click(function(){firstClick($(this).text())});
$("[data-click=second]").click(function(){secondClick($(this).text())});
$("[data-click=third]").click(function(){thirdClick($(this).text())});
var firstClick=function(r){alert(r)}
var secondClick=function(r){alert(r)}
var thirdClick=function(r){alert(r)}
直接实现要绑定三次click事件,不好维护,如果click事件是10个,或者更多,这样写的话就太恐怖了
判断实现
$(".click").click(function(r){
var _click=this.data("click");
var _text=this.text();
if(_click=="firstClick")
{
firstClick(_text);
}
else if(_click=="secondClick")
{
secondClick(_text);
}
else
{
thirdClick(_text);
}});
var firstClick=function(r){alert(r)}
var secondClick=function(r){alert(r)}
var thirdClick=function(r){alert(r)}
判断data-click属性来实现,虽然实现了,但是让人感觉好恶心,那么多次的判断,更加难以维护。
apply结合eval实现
$(".click").click(function(){
var _click=$(this).data("click");
var _text=$(this).text();
var _func=eval(_click);
_func.apply($(this),[_text]);
});
apply 结合eval实现:eval直接将data-click值,定义为函数变量,再由这个变量来调用apply函数清晰易懂,但是这也不是绝对的,对于没有掌握这个知识点的同学来说,实在是太痛苦了,因为根本看不懂,但是,这是js的基础知识,也是很实用的知识,应该去掌握的,下面简单介绍下eval函数和apply函数
eval函数介绍:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval(string)
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
apply函数简介
apply很强大,知识点也很多,但是我认为,非常有用的东西也就是下面这些知识点
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
这里需要注意的是,args是个数组,但是Function中得参数是多个,他们和args是一一对应的,比方说args=[1,2,3],Function定义为 function(x)则调用时x的值为1,而不是[1,2,3],若Function定义为function(x,y),则,x的值为1,y的值为2.
标签:
原文地址:http://www.cnblogs.com/wjcnet/p/4292901.html