首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

请帮忙解释上这段代码

2012-11-03 
请帮忙解释下这段代码犀牛书第九章类的扩充有段代码看不明白JScript codeNumber.prototype.times functi

请帮忙解释下这段代码
犀牛书第九章类的扩充有段代码看不明白

JScript code
Number.prototype.times = function (fun,context) {console.log(Number(this));    var n = Number(this); //这里的this指代什么,我打印了n显示的是调用的数字    for(var i=0;i<n;i++)         fun.call(context,i);  //context代表什么}var n = 3;n.times(function (n) {console.log(n + ' hello')});  //times不是有两个参数么,怎么这里只有一个了???


[解决办法]
JScript code
/*    首先:明白,这是对数字类型进行的一个原型扩展,参数有两个    fun:这是一个回调函数    context:看命名也能猜出点来了。承继上下文的。原本应该是一个作用域。比如:window*/Number.prototype.times = function (fun,context) {   //this指的是调用此方法的对象:你举的例子中var n=3;n.times()来调用这个方法。那么:this=3    console.log(Number(this));    var n = Number(this);    for(var i=0;i<n;i++)        //关于call方法下面说,你也可以在网上找一找        //按你举例来说,下面这句其实就相当于: fun(i);这个是你传进来的fun=function (n) {console.log(n + ' hello')}        fun.call(context,i);}var n = 3;n.times(function (n) {console.log(n + ' hello')});
[解决办法]
this指的是当前调用times的对象,你调用的是n.times,this就是指n。
context是函数的第二形参,fun.call(context,i)相当于context.fun(i).
js的函数调用,并非每次都要用到所有形参,这里的context是可选项,当times的第一形参fun中不需要显式调用this时,context不是必要的。当context没有传入时,context的值为undefined
[解决办法]
补充:js中传参是很自由的,不是定义了多少形参就要传多少个,也不是没定义形参就不能传参了。
主要是在函数内容根据实际情况处理好参数的默认值
比如:

JScript code
function fn(a,b,c){    a=a||1;    b=b||2;    c=c||3;    alert(a+b+c);}fn(4);//9fn(4,5);//12fn(null,null,10);//13function fn2(){    var a=arguments[0]||1,        b=arguments[1]||2,        c=arguments[2]||3;    alert(a+b+c);};fn2(4);//9fn2(4,5);//12fn2(null,null,10);//13
[解决办法]
不要光看。看了还需要练习,大量的练习,直到你明白了原理,碰到问题能马上反应过来。虽然可能一下子不能直接写出来,但至少知道:哦,这个应该那样去处理,然后再想想,翻翻就搞定

至少到这种程度吧

热点排行