JavaScript对象继承方法

来源:互联网 发布:域名被劫持自动被跳转 编辑:程序博客网 时间:2024/05/22 04:42

JavaScript对象继承方法

JavaScript继承】

1. 对象冒充

function ClassA(sColor){

this.color = sColor;

this.sayColor = function(){alert(this.color);};

}

function ClassB(sColor,sName){

this.newMethod = ClassA;

this.newMethod(sColor);

delete this.newMethod;

this.name = sName;

this.sayName = function(){alert(this.name);};

}

2. call()方法,第一个参数用作this的对象,其他参数都直接传递给函数自身

function sayColor(sPrefix, sSuffix){

alert(sPrefix + this.color + sSuffix);

}

var obj = new Object();

obj.color = "red";

sayColor.call(obj, "The color is ", ", a very nice color indeed.");

//与继承机制的对象冒充方法一起使用该方法

function ClassB(sColor,sName){

ClassA.call(this, sColor);

this.name = sName;

this.sayName = function(){alert(this.name);};

}

3. applay()方法有两个参数,用作this的对象和要传递给函数的参数的数组

function sayColor(sPrefix, sSuffix){}

var obj = new Object();

obj.color = "red";

sayColor.apply(obj, new Array("The color is ","a very nice color indeed."));

//另一方法

function classB(sColor,sName){

ClassA.apply(this, arguments);//ClassB整个arguments对象传递

this.name = sName;

this.sayName = function(){alert(this.name);};

}

//只有超类中的参数顺序和子类中的完全一致才可以传递参数对象,如果不是就必须创建一个单独的数组,按照正确顺序放置参数,此外,还可以使用call()方法

4. 原型链方法

function ClassA(){}

ClassA.prototype.color = "red";

ClassA.prototype.sayColor = function (){alert(this.color);};

function ClassB(){}

ClassB.prototype = new ClassA();(调用ClassA()时记得没有传递参数,要确保构造函数没有任何参数)

//之后才添加属性

ClassB.prototype.name = "";

ClassB.prototype.sayName = function(){alert(this.name);};

5. 混合方法(最合理)

function ClassA(sColor){this.color = sColor;}

ClassA.prototype.sayColor = function(){alert(this.color);};

function ClassB(sColor,sName){

ClassA.call(this,sColor);

this.name = sName;

}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function(){alert(this.name);};


参考资料:http://hi.baidu.com/yhsdyuan/item/1591e93844d5b6ed1b969691