首页 > 代码库 > js:深入函数(函数是对象)

js:深入函数(函数是对象)

//由于函数是对象,所以可以直接把函数通过参数传递进来;也可以把函数作为返回值。
function calFun(fun,arg){
  //第一个参数就是函数对象
  return fun(arg);
}

function sum(num){
  return num+100;
}

function say(str){
  alert("hello "+str);
}
//调用了say函数
callFun(say,"js"); //hello js
//调用了sum函数
alert(callFun(sum,100)); //200

function fun1(arg){
  var rel = function(num){
    return arg+num;
  }
  return rel;
}  //返回的是一个函数对象
//f是一个函数对象,可以完成调用
var f = fun1(20);
alert(f); //function(num){return arg+name;}
alert(f(30)); //50

var arr = [1,2,33,12,198];
arr.sort();
alert(arr);  //1,12,198,33   对于js而言,默认是按照字符串进行排序的。

//如果我们希望通过数字大小来排序,可以通过如下方式:
function sortByNum(a,b){
  return parseInt(a)-parseInt(b);
}
arr.sort();
alert(arr);  //1,2,12,33,198

//根据对象来排序
function Person(name,age){
  this.name=name;
  this.age=age;
}

var p1 = new Person("John",23);
var p2 = new Person("Lemo",39);
var p3 = new Person("Ada",41);

var ps = [p1,p2,p3];

//ps.sort(sortByAge);
//ps.sort(sortByProperty("age"));

function sortByName(obj1,obj2){
  return obj1.name>obj2.name?1:(obj1.name==obj2.name?0:-1);
} //按名字排序
function sortByAge(obj1,obj2){
  return obj1.age-obj2.age;
} //按年龄排序

//通过上述方法来处理排序,带来的问题是需要为每一个属性创建一个函数,显然不灵活
//但是如果通过函数的返回值调用就不一样了。
function sortByProperty(propertyName){
  var sortFun = function(obj1,obj2){
    return obj1[propertyName]>obj2[propertyName]?1:(obj1[propertyName]==obj2[propertyName]?0:-1);
  }
  return sortFun;
}

原创文章如转载,请注明出处,本文首发于csdn网站:http://blog.csdn.net/magneto7/article/details/24724299

 

js:深入函数(函数是对象)