<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JavaScript Study 2015.11.9--</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> </style> <script type="text/javascript"> //function的定义 /* function是对象,但是与对象又有很大的不同。 */ function fn1(){ alert("fn1"); } var fn2 = fn1;//fn1,fn2拷贝内存空间 //alert(fn1); //alert(fn2); fn2 = function(){ alert("fn2"); } //fn1();//fn1 //fn2();//fn2 var obj1 = new Object(); obj1.name = "obj1"; var obj2 = obj1;//obj1,obj2指向内存中的同一块空间 obj2.name = "obj2"; document.write(obj1.name);//obj2 document.write("<br>"); document.write(obj2.name);//obj2 document.write("<br>"); //function是对象,所以,可以作为function的参数进行传递 function callFun(funName,arg){ funName(arg); } function write(arg){ document.write(arg); document.write("<br>"); } callFun(write,"function is a arg");//write是function,这里作为参数。 //Sort var as = [1,2,30,22,12,90,80]; document.write(as.sort()); //按字符排序 document.write("<br>"); //怎么按数字排序呢 function sortByNum(a,b){ return a-b; } document.write(as.sort(sortByNum)); //按数字排序 document.write("<br>"); //怎么对对象排序呢 function Person(name,age){ this.name = name; this.age = age; } var p1 = new Person("adada",30); var p2 = new Person("disk",18); var p3 = new Person("bob",20); var p4 = new Person("harhar",50); as = [p1,p2,p3,p4]; as.sort(); for(var i=0;i<as.length;i++){ document.write(as[i].name+","+as[i].age); document.write("<br>"); } document.write("<br>"); function sortByName(obj1,obj2){ if(obj1.name>obj2.name){ return 1; } else if (obj1.name<obj2.name) { return -1; } else return 0; } as.sort(sortByName); for(var i=0;i<as.length;i++){ document.write(as[i].name+","+as[i].age); document.write("<br>"); } function sortByAge(obj1,obj2){ return obj1.age - obj2.age; } as.sort(sortByAge); for(var i=0;i<as.length;i++){ document.write(as[i].name+","+as[i].age); document.write("<br>"); } //如果Person有n个属性,那就需要些n个方法。 //通用的实现方式: function sortByPropertyName(propertyName){ //这里返回了一个function return function(obj1,obj2){ if(obj1[propertyName]>obj2[propertyName]){ return 1; }else if(obj1[propertyName]<obj2[propertyName]){ return -1; } else return 0; } } as.sort(sortByPropertyName("name"));//只需要传入属性名就可以了 for(var i=0;i<as.length;i++){ document.write(as[i].name+","+as[i].age); document.write("<br>"); } as.sort(sortByPropertyName("age"));//只需要传入属性名就可以了 for(var i=0;i<as.length;i++){ document.write(as[i].name+","+as[i].age); document.write("<br>"); } function sum(num1,num2){ document.write(num1+num2); document.write("<br>"); } //上面的语句= var sum = function(num1,num2){ document.write(num1+num2); document.write("<br>"); } function sum(num1){ document.write(num1+100); document.write("<br>"); } //上面的语句= sum=function(num1){ document.write(num1+100); document.write("<br>"); } //会覆盖 sum(20);//120 sum(20,20);//120 //arguments function args(a1,a2,a3){ document.write(arguments.length); document.write("<br>"); } args(1); args(1,2); args(1,2,3); args(1,2,3,4);//这里并不会报错,而是超出的部分不使用 ///1, 函数的内存图,与对象的区别。 // 2, Function的Sort,对象的Sort。 //3, callee apply //4, json //5, factory createPerson //6, prototype的内存图。 //7, prototype重写的内存图。 </script> </head> <body> <div id="wrap"> </div> </body> </html>