<!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>