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

六道有意思的JS题-4月4日修改

2012-09-14 
6道有意思的JS题--4月4日修改前一段看tom大叔的深入理解JavaScript系列 ,受益颇多。在第20篇的结尾有6

6道有意思的JS题--4月4日修改

前一段看tom大叔的 <<深入理解JavaScript系列>> ,受益颇多。

在第20篇的结尾有6道题很有意思,花了好长时间做了只做出5道,

第6题看了 Gray Zhang的答案 , 之前没见过toString和valueOf的用法。

?

题目:

    找出数字数组中最大的元素(使用Match.max函数)转化一个数字数组为function数组(每个function都弹出相应的数字)给object数组进行排序(排序条件是每个元素对象的属性个数)利用JavaScript打印出Fibonacci数(不使用全局变量)实现如下语法的功能:var a = (5).plus(3).minus(6); //2实现如下语法的功能:var a = add(2)(3)(4); //9

在看完<<js高级程序设计>>后,对几道题进行了重新作答

//Q1:var a = [1,2,3,4,5],       big = a[0];for(var i=1,l=a.length; i<l; ++i){//最简单的方法    big = big > Math.max(a[0],a[i]) ? big : Math.max(a[0],a[i]);}alert(big);//在ECMAScript v3之后的版本中的max函数已经支持2个以上的参数,//所以可以用下面的方法var a = [1,2,3,4,5], ret;ret = Math.max.apply(null,a);//Q2:Array.prototype.toFunction = function(){        var _this =this;for(var i=0; i< this.length; ++i){(function(i){_this[i] = function(){ //闭包的应用alert(i); }})(i);}}var a = [1,2,3,4,5,6];a.toFunction();a[0]();//方法2,避免在Array原型连上添加方法,修正错误。function arrayToFunction(array){    for(var i=0, len = array.length; i< len; ++i){          (function(i){    //闭包的应用            var num = 0; ?            num = array[i];            array[i] = function(){                   alert(num);               }          })(i);      }  }  var a = [1,2,3,4,5,6];  arrayToFunction(a);a[3]();?//Q3:Array.prototype.mysort = function(){    var i=0,j,cout;    for(;i<this.length;i++){cout = 0;        for ( var j in this[i]){            if( this[i].hasOwnProperty(j))  //排除继承过来的属性                cout++;        }        this[i].propertyNums = cout;    }    return this.sort(function(a,b){return a.propertyNums - b.propertyNums;    });}var a = [{a:"name",b:"type"},{c:"hello",d:"123",e:function(){}}];a.mysort();//方法2,避免在Array原型连上添加方法function objectSort(array){    var len = array.lenth,        i, j, cout;    for(i=0; i<len; ++i){cout = 0;        for ( var j in array[i]){            if( array[i].hasOwnProperty(j))  //排除继承过来的属性                cout++;        }        array[i].propertyNums = cout;    }    return array.sort(function(a,b){return a.propertyNums - b.propertyNums;    });}var a = [{a:"name",b:"type"},{c:"hello",d:"123",e:function(){}}];objectSort(a);?//Q4:function fibonacii(n){return n<2 ? 1 : arguments.callee(n-1) + arguments.callee(n-2);//return n<2 ? 1 : fibonacii(n-1) + fibonacii(n-2);//用arguments.callee代替函数名,降低耦合度}function printFib(n){var ret = [];if(typeof n === "number"){for(var i=1; i<=n; i++){ret.push(fibonacii(i));}console.log(ret);}}printFib(5);//Q5:Number.prototype.plus = function(x){if(typeof x === "number")return this + x;elsereturn this;}Number.prototype.minus = function(x){if(typeof x === "number")return this - x;elsereturn this;}alert((2).plus(3).minus(3));//这题算是最简单的了//Q6://直接copy Gray zhang 的,算是学了一招吧function add(x) {        var result = x;        var fn = function(x) {               result += x;               return fn;        };        fn.toString = fn.valueOf = function() {                  return result;         };        return fn;}
?

?

热点排行