Function
在ecamscript规范中。函数都是一个Function类型的对象,
而普通函数,和类定义的普通方法,以及类静态方法都有不同的地方。
相同点:
他们都是Function类的对象。
不同点:
在作函数绑定上,(函数绑定:就是将函数赋值给另一个函数,或者利用call或apply方法将函数绑定到别的对象上调用)
如果是类的普通函数绑定到别的对象上去,那么函数中的this,指的就是该类的实例,无论你是用call方式,还是将函数赋值给另一个对象,this始终指的就是先前函数所在的那个类的实例对象,而如果是一个普通函数,this指的就是当前绑定到的那个关联对象。
给对象动态创建的方法和普通函数一样,因为该方法其实就是将一个匿名的普通函数赋给对象的方法变量的,如:obj.fun=function(str){alert(str)} 。
绑定方式:比如obj.fun.call(obj2) 这个方式就是将fun函数绑定到obj2上执行
第二种方式: obj2.funName= obj.fun; obj2.funName();
为什么说第二种方式也是一种绑定,写个例子证明一下:
如果obj.fun()等价于obj.fun.call(obj);
如果:obj2.funName= obj.fun; //因为函数是Function类型的对象,那么obj2.funName和 obj.fun一样都是引用同一个对象。
那么obj2.funName()也可等价于obj.fun.call(obj2);
说明一下:类的静态函数是定义类的时候就存在了它的Function对象,而类的普通函数则是在类 实例化的时候才生成对应的函数的Function对象
关于call方法,详见Function的call方法.api文档。
函数绑定:其实就是指,将一个函数临时的赋给某个对象,该对象就临时的拥有了这个函数,但实际上对象上是没有这个函数定义的