我们可以设想,如果用这个方法拷贝一份父类的原型属性给子类,是不是就避免了上面提到的子类原型中多了一份父类构造函数内的属性。看如下代码:
function Super(){ this.val = 1; this.arr = [1]; } Super.prototype.fun1 = function(){}; Super.prototype.fun2 = function(){}; function Sub(){ Super.call(this); } var p = inheritObject(Super.prototype); //{1} p.constructor = Sub; //{2} Sub.prototype = p; //{3} var sub = new Sub();基本思路就是:不必为了指定子类型的原型而调用父类的够着函数,我们需要的无非就是父类原型的一个副本而已。本质上就是复制出父类的一个副本,然后再将结果指定给子类型的原型。
三、多态所谓多态,就是同一个方法的多种调用方式,在javascript中,通过arguments对象对传入的参数做判断就可以实现多种调用方式。
例子:
function Add(){ function zero(){ return 10; } function one(num){ return 10 + num; } function two(num1, num2){ return num1 + num2; } this.add = function(){ var arg = arguments, len = arg.length; switch (len){ case 0: return zero(); case 1: return one(arg[0]); case 2: return two(arg[0], arg[1]); } } } var A = new Add(); console.log(A.add()); //10 console.log(A.add(5)); //15 console.log(A.add(6, 7)); //13