看书的时候对以下两点有疑问:
1.函数就是对象,函数名是指针!
2.var sum = new Function();
alert(typeof sum);//function 为什么不是object,而是function?
通过以下代码分析:
1 //1.函数的定义 2 function sum1(a1,b1){ 3 return a1+b1; 4 } 5 alert(sum1(1,1));//2 6 7 var sum2 = function(a1,b1){ 8 return a1+b1; 9 }; 10 alert(sum2(1,1));//2 11 12 var sum3 = new Function("a1,b1","return a1+b1;"); 13 sum3.age = 100; 14 alert(sum3(1,1));//2 15 alert(sum3.age);//100 16 alert(typeof Function);//function 17 alert(typeof sum3);//function 18 //函数是对象,函数名是指针 19 20 //2.对象 21 var person = new Object(); 22 person.age = 10; 23 person.name = "nic"; 24 alert(person.age);//10 25 alert(typeof Object);//function 26 alert(typeof person);//object 27 28 //总结: 29 //1.从结构上看:new和Object构造实例化了对象person,person包含一个指针 30 // new和Function构造函数实例化对象sum3,sum3包含一个指针 31 //但是new和Function构造函数定义函数sum3,也就是说sum3是函数也是对象,sum3包含一个指针 32 //因此有:函数是对象,函数名是指针的结论。 33 34 //2.为什么typeof检测的结果不一致:alert(typeof sum3);//function 35 // alert(typeof person);//object 36 //先分析:alert(typeof Function);//function 37 // alert(typeof Object);//function 38 //可见对象可以通过new和构造函数实例化! 39 //那么alert(typeof sum3);//function 那么new和Funtion定义的sum3函数(也是对象),也可以用通过构造函数实例化对象。 40 41 //那么可以通过以上结论实践一下,new和Function定义的函数可以当作构造函数实例化对象: 42 var Animal = new Function(); 43 alert(typeof Animal);//function 44 var newAniaml = new Animal(); 45 alert(typeof newAniaml);//Object 46 47 //而且function sum(){} 等价于 var sum = function(){};等价于 var sum = new Function(); 48 //因此也可以通过前两者定义构造函数,再实例化对象。