网上看了不少,感觉废话都太多,抓不住重点,下面单刀直入。
一、先弄清楚对于对象而言call()方法的语法
obj1.obj1's function.call(obj2,parameter1,parameter2,......)
作用:让obj2代替obj1调用原本属于对象obj1的方法obj1's function,其中parameter1,parameter2......为调用obj1's function本身需要的参数。
要点:当obj1可省略,也就是说对于非对象的方法也可以用,只不过对于非对象的方法而言,用call没有什么意义,因为我们的初衷是改变对象方法中的this所指的实体。
二、利用call()实现类的静态属性继承
普遍语法上讲,JS中并没有类(新出的Class可能是,但是不是经典语法),这里的“类”只是借用概念.
下面先给例子
var class1 = function(x){
this.a = x;
}
var class2 = function(x,y){
class1.call(this,x);
this.b = y;
}
var obj = class2(1,5);
console.log("obj.a:"+obj.a+",obj.b"+obj.b);
结果:
obj.a:1,obj.b:5
这样做的好处很明显,成功利用父类的构造函数,从而等价地实现了子类对于父类静态属性的继承,实现了代码重用。
OK,完工!