1. [代码][JavaScript]代码
//1、对象冒充
//说明:构造函数使用this关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使ClassA的构造函数成为ClassB的方法,然后调用它。ClassB就会收到ClassA的构造函数中定义的属性和方法。
function ClassA(sColor) {
this.color = sColor;
this.showColor = function() {
alert(this.color);
};
}
function ClassB(sColor, sName) {
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name = sName;
this.showName = function() {
alert(this.name);
};
}
var oa = new ClassA("RED");
var ob = new ClassB("blue", "red");
oa.showColor();
// RED
ob.showColor();
// blue
ob.showName();
// red
2. [代码][JavaScript]代码
//2、call()方法
//说明:这是与经典的对象冒充方法最相似的方法。它的第一个参数用作this的对象。其他参数都都直接传递给函数自身。其实就相当于前一个是对象,后一个是普通的参数一样。
function showColor(sPrefix, sSuffix) {
alert(sPrefix + this.color + sSuffix);
};
var obj = new Object();
obj.color = "red";
// the color is red ,a very nice color indeed
showColor.call(obj, "the color is ", " ,a very nice color indeed");
function ClassA(sColor) {
this.color = sColor;
this.showColor = function() {
alert(this.color);
};
}
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
this.showName = function() {
alert(this.name);
};
}
var ob = new ClassB("red", "ooo");
ob.showColor();
// red
ob.showName();
// ooo
3. [代码][JavaScript]代码
//3、apply()方法
//说明:有两个参数,用作this的对象和要传递给函数的参数的数组。
function showColor(sPrefix, sSuffix) {
alert(sPrefix + this.color + sSuffix);
};http://www.huiyi8.com/jiaoben/?
var obj = new Object();
obj.color = "green";
// the color is green ,a very nice color indeed
showColor.apply(obj, new Array("the color is ", " ,a very nice color indeed"));
function ClassA(sColor) {
this.color = sColor;
this.showColor = function() {
alert(this.color);
};
}
function ClassB(sColor, sName) {
ClassA.apply(this, arguments);
this.name = sName;
this.showName = function() {
alert(this.name);
};
}
var ob = new ClassB("red", "ooo");
ob.showColor();
// red
ob.showName();
// ooo
4. [代码][JavaScript]代码
//4、原型链
// 说明:原型链扩展了类的原型定义方式。prototype对象是个模板,要实例化的对象都以这个模板为基础。prototype对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制。原型链的弊端是不支持多重继承。记住,原型链会用另一种类型的对象重写类的prototype属性。因此子类的所有属性和方法必须出现在prototype属性被赋值以后。
// 原型链方式对应原型方式
function ClassA() {
}
ClassA.prototype.color = "red";
ClassA.prototype.showColor = function() {
alert(this.color);
};
function ClassB() {
}
ClassB.prototype = new ClassA();
ClassB.prototype.name = "redred";
ClassB.prototype.showName = function() {
alert(this.name);
};
var objA = new ClassA();
var objB = new ClassB();
objA.color = "blue";
objA.showColor();
// blue
objB.color = "green";
objB.name = "dodo";
objB.showColor();
// green
objB.showName();
// dodo
alert( objB instanceof ClassA);
// true
alert( objB instanceof ClassB);
// true
5. [代码][JavaScript]代码
//5、混合方式
//说明:与定义类时同样的方式,即利用构造函数方式定义属性,用原型方式定义方法。而在继承机制中,可以用对象冒充继承构造函数的属性,用原型链继承prototype对象的方法。
function ClassA(sColor) {
this.color = sColor;
}
ClassA.prototype.showColor = function() {
alert(this.color);
};
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.showName = function() {
alert(this.name);
};广告代码
var objA = new ClassA("BLUE");
objA.showColor();
// BLUE
var objB = new ClassB("red", "baba");
objB.showColor();
// red
objB.showName();
// baba
相关文章
- 09-17关于.NET中迭代器的实现以及集合扩展方法的理解
- 09-17NSLayoutConstraint-代码实现自己主动布局的函数使用方法说明
- 09-17js实现获取两个日期之间所有日期最简单的方法
- 09-17SpringAOP在一个实现类中定义自身的方法, 无法调用, 只能调用实现接口的方法
- 09-17ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
- 09-1752单片机四种方法实现流水灯
- 09-17图像加密中测试混沌系统性能的 0-1测试/0-1 Test方法与MATLAB实现代码
- 09-17python-用底部编辑线,状态栏和滚动历史记录实现“控制台外壳”的最佳方法?
- 09-17子类继承之后添加新的属性出现报错及解决方法
- 09-171.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量