prototype是Function对象的一个属性,当我们访问对象的一个成员时,先在对象内部找,如果找不到,则到对象所在类的prototype对象中找。
封装
封装:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
javascript中,通过闭包可以实现封装,看代码例子。
涵盖了javascript公有成员定义、私有成员定义、特权方法定义的简单示例!
<script>
//定义一个javascript类
function JsClass(privateParam/* */,publicParam){//构造函数
var priMember = privateParam; //私有变量
this.pubMember = publicParam; //公共变量
//定义私有方法
function priMethod(){
return "priMethod()";
}
//定义特权方法
//特权方法可以访问所有成员
this.privilegedMethod = function(){
var str = "这是特权方法,我调用了n";
str += " 私有变量:" + priMember +"n";
str += " 私有方法:" + priMethod() +"n";
str += " 公共变量:" + this.pubMember +"n";
str += " 公共方法:" + this.pubMethod();
return str;
}
}
//添加公共方法
//不能调用私有变量和方法
JsClass.prototype.pubMethod = function(){
return "pubMethod()";
}
//使用 JsClass的实例
JsObject = new JsClass("priMember","pubMember");
//alert(JsObject.pubMember);//弹出pubMember信息
//alert(JsObject.priMember);//弹出undefined信息
//alert(JsObject.pubMethod());//弹出pubMethod信息
//alert(JsObject.priMethod());//弹出"对象不支持此属性或方法"的错误
alert(JsObject.privilegedMethod());
</script>
涵盖了javascript公有成员定义、私有成员定义、特权方法定义的简单示例!
<script>
//定义一个javascript类
function JsClass(privateParam/* */,publicParam){//构造函数
var priMember = privateParam; //私有变量
this.pubMember = publicParam; //公共变量
//定义私有方法
function priMethod(){
return "priMethod()";
}
//定义特权方法
//特权方法可以访问所有成员
this.privilegedMethod = function(){
var str = "这是特权方法,我调用了n";
str += " 私有变量:" + priMember +"n";
str += " 私有方法:" + priMethod() +"n";
str += " 公共变量:" + this.pubMember +"n";
str += " 公共方法:" + this.pubMethod();
return str;
}
}
//添加公共方法
//不能调用私有变量和方法
JsClass.prototype.pubMethod = function(){
return "pubMethod()";
}
//使用 JsClass的实例
JsObject = new JsClass("priMember","pubMember");
//alert(JsObject.pubMember);//弹出pubMember信息
//alert(JsObject.priMember);//弹出undefined信息
//alert(JsObject.pubMethod());//弹出pubMethod信息
//alert(JsObject.priMethod());//弹出"对象不支持此属性或方法"的错误
alert(JsObject.privilegedMethod());
</script>
继承
面向对象编程 (OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
1、对象冒充
2、call及apply
3、原型链
4、混合方式
继承-对象冒充
对象冒充可以实现多重继承 例如
但是如果classX和classY有相同的属性或者方法,classY具有高优先级.
继承-call方法
call方法使与经典的对象冒充法就相近的方法,它的第一个参数用作this的对象,其他参数都直接传递给函数自身.
继承-apply方法
aplly()方法有2个参数,一个用作this对象,一个使传递给函数的参数数组.
继承-原型链
prototype对象的任何属性和方法都会被传递给对应类的所有实例,原型链就是用这种方式来显现继承.
这里需要注意 调用classA的构造函数时,没有给它传递参数,这是原型链的标准做法,确保函数的构造函数没有任何参数.
并且 子类的所有属性和方法,必须出现在prototype属性被赋值后,应为在它之前赋的值会被删除.因为对象的prototype属性被替换成了新对象,添加了新方法的原始对象将被销毁.
继承-混和方式
就是用冒充方式 定义构造函数属性,用原型法定义对象方法.
在classB的构造函数中通过调用call方法 继承classA中的name属性,用原型链来继承classA的showName方法.
javascript中的方法重载探讨
方法重载(overloading)及覆盖(overriding)
Javascript 中的方法本身就是一个带可变参数的,不支持重载操作。但我们可以在方法体内自由检测方法的参数情况,来实现重载的效果。(使用可变参数或arguments 来模拟重载的示例)。
覆盖,也称为改写,就是指子类中定义的方法替换掉父类的方法
javascript中多态性(polymorphisn)探讨
多态性(polymorphisn):是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
var a=[a1,a2,a3];
您可能感兴趣的文章:
JavaScript面向对象编程(入门参考)
理解JavaScript中的面向对象
JavaScript 面向对象的原型与实例分析
JavaScript面向对象的一个例子
JavaScript 面向对象(OOP)的语法参考
javascript面向对象之this用法举例
javascript面向对象编程之this详解
javascipt面向对象扩展的例子
javascipt面向对象之成员函数实例
javasrcipt 面向对象编程的例子