不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
Javascript模拟类的继承
编辑:dnawo 日期:2007-07-09
虽然在Javascript中大量地使用了对象,但是它并没有正式类的概念,而是使用特有的原型对象为基础的继承机制模拟了经典的面向对象程序设计语言中的以类为基础的继承机制,并且做为非常出色。这种以原型对象为基础的继承机制直观的表示为:超类(Object) → 原型对象 → 子类(内部类和自定义类) → 类的实例(对象),这看起来有些奇怪,但你必须接受这种继承机制。
Javascript中并没有明确提出一个类如何从另一个类中继承其属性和方法,但我们还是有办法模拟的:
下边使用构造函数创建上边类的实例:
"构造函数定义了类自身,同时还定义了一个空的原型对象",你可以运行下边的代码证明:
Javascript中并没有明确提出一个类如何从另一个类中继承其属性和方法,但我们还是有办法模拟的:
复制内容到剪贴板
程序代码

//在超类Object中定义继承的方法
//子类都将使用extends来说明它继承了谁
Object.prototype.extends = function(from_obj,to_obj){
var temp;
for(temp in from_obj){
to_obj[temp] = from_obj[temp];
}
}
//为Class类定义一个构造函数的方法
//这个构造函数也定义了类自身,同时还定义了一个空的原型对象
function Class(){
this.x;//创建属性x但初始化,值为undefined
this.y = "yy";//创建属性y并初始化
this.add = function(){ return this.x + this.y;};//创建add方法
}
//为Class1类定义一个构造函数的方法
function Class1(){
this.extends(new Class(),this);//继承Calss
this.add = function(){ return this.x + this.z;};//覆盖了Class中的add方法
this.z = "zz";//创建属性z并初始化
this.minus = function(m,n){return m-n;};//创建minus方法
}
//为Class2类定义一个构造函数的方法
function Class2(a){
this.extends(new Class1(),this);//继承Calss1
//模拟Java一个类多个构造函数。如Array()、Array(3)、Array("aa","bb","cc")都可创建数组
if(a==undefined){
this.a = "aa";//创建属性z赋于默认值
}else{
this.a = a;//创建属性z并赋值
}
}
//子类都将使用extends来说明它继承了谁
Object.prototype.extends = function(from_obj,to_obj){
var temp;
for(temp in from_obj){
to_obj[temp] = from_obj[temp];
}
}
//为Class类定义一个构造函数的方法
//这个构造函数也定义了类自身,同时还定义了一个空的原型对象
function Class(){
this.x;//创建属性x但初始化,值为undefined
this.y = "yy";//创建属性y并初始化
this.add = function(){ return this.x + this.y;};//创建add方法
}
//为Class1类定义一个构造函数的方法
function Class1(){
this.extends(new Class(),this);//继承Calss
this.add = function(){ return this.x + this.z;};//覆盖了Class中的add方法
this.z = "zz";//创建属性z并初始化
this.minus = function(m,n){return m-n;};//创建minus方法
}
//为Class2类定义一个构造函数的方法
function Class2(a){
this.extends(new Class1(),this);//继承Calss1
//模拟Java一个类多个构造函数。如Array()、Array(3)、Array("aa","bb","cc")都可创建数组
if(a==undefined){
this.a = "aa";//创建属性z赋于默认值
}else{
this.a = a;//创建属性z并赋值
}
}
下边使用构造函数创建上边类的实例:
复制内容到剪贴板
程序代码

//使用构造函数创建Class类实例one
var one = new Class();
document.write(one.x + "<br/>" + one.y + "<br/>" + one.add() + "<br/><br/>");
//使用构造函数创建Class1类实例two
var two = new Class1();
two.x = "xx";
document.write(two.x + "<br/>" + two.y + "<br/>" + two.z + "<br/>" + two.add() + "<br/>" + two.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例three
var three = new Class2();
three.x = "xx";
document.write(three.x + "<br/>" + three.y + "<br/>" + three.z + "<br/>" + three.a + "<br/>" + three.add() + "<br/>" + three.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例four
var four = new Class2("mzwu");
four.x = "xx";
document.write(four.x + "<br/>" + four.y + "<br/>" + four.z + "<br/>" + four.a + "<br/>" + four.add() + "<br/>" + four.minus(5,3) + "<br/><br/>");
var one = new Class();
document.write(one.x + "<br/>" + one.y + "<br/>" + one.add() + "<br/><br/>");
//使用构造函数创建Class1类实例two
var two = new Class1();
two.x = "xx";
document.write(two.x + "<br/>" + two.y + "<br/>" + two.z + "<br/>" + two.add() + "<br/>" + two.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例three
var three = new Class2();
three.x = "xx";
document.write(three.x + "<br/>" + three.y + "<br/>" + three.z + "<br/>" + three.a + "<br/>" + three.add() + "<br/>" + three.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例four
var four = new Class2("mzwu");
four.x = "xx";
document.write(four.x + "<br/>" + four.y + "<br/>" + four.z + "<br/>" + four.a + "<br/>" + four.add() + "<br/>" + four.minus(5,3) + "<br/><br/>");
"构造函数定义了类自身,同时还定义了一个空的原型对象",你可以运行下边的代码证明:
复制内容到剪贴板
程序代码

Class2.prototype.constructor == Class2;//结果为true
var names = "";
for(var name in Class2.prototype) names += name;//结果只有extends
var names = "";
for(var name in Class2.prototype) names += name;//结果只有extends
评论: 0 | 引用: 0 | 查看次数: 4262
发表评论
请登录后再发表评论!