data是数组
sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法)
然后先看createComparisonFunction函数
这个函数返回了一个方法
其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包,保留了propertyName函数
然后看你的排序data.sort(createComparisonFunction("name"))
你在排序的时候传入参数createComparisonFunction("name")
在执行sort之前会先执行createComparisonFunction("name")
他会返回一个方法,其执行作用域保留
然后开始走排序
data.sort方法会内部循环值排序,他每次比较的2个值会传入你传入的函数参数内,通过你传入的函数参数来判断排序
最后简单解释下createComparisonFunction
object1: 比较的第一个值
object2: 比较的第二个值
propertyName: 就是执行createComparisonFunction的参数
data["name"]其实就是data.name的另一种写法
function sortNumber(a,b){
return a.number - b.number//按印数排名
}
function element(name,number){//name为书名,number是什么印数
this.name=name
this.number=number
this.toString=function(){//关键要重写toString,返回书名
return this.name
}
}
var arr = new Array(3)
arr[0] = new element("x",2000)
arr[1] = new element("y",1000)
arr[2] = new element("z",3000)
document.write(arr.sort(sortNumber))
//定义一个对象数组var data = [{ name: "jiang", age: 22 }, { name: "AAAAAAAAAAAAAA", age: 21 }, { name: "CCCCCCCCc", age: 25}]
//定义一个比较器
function compare(propertyName) {
return function (object1, object2) {
var value1 = object1[propertyName]
var value2 = object2[propertyName]
if (value2 <value1) {
return -1
}
else if (value2 >value1) {
return 1
}
else {
return 0
}
}
}
//使用方法
data.sort(compare("name"))
alert(data[0].name)//jiang
//使用方法
data.sort(compare("age"))
alert(data[0].age)//25s