时间:2021-05-26
一。传统的基于原型(Prototype)的做法
确切地说Javascrīpt的“类”在严格意义上来讲并不能算真正的类,从其声明的对象到类(估切这么说)有这样一个关系:
Instance.__proto__=InstanceClass.prototype(ie不支持)
以上说明:实例的属性(__proto__)等于类的prototpye,我们可以看出,实例的"__proto__"正好巧接在类的"prototype"上,通过原型链(prototype)来查找其方法并扩展,我们会发现其方法(Method)与其属性(Property)都是Public(当然你也可以用Private,即不用this),而prototype其实就是一对象,用来记录方法做为一个集合
假设我们声明一个类A,可以如此
functionA(){
this.className="ClassA";//添加Public属性,正确来说类名应该是Private的
}
//添加一方法
A.prototype.getClassName=function(){
returnthis.className;//this指代A,而不是prototype
}
//声明一对象
varAObj=newA();
alert(AObj.__proto__==A.prototype);//ie下无效,ff下为true,说明上面的验证是正确的
//我们来看看对象属性
关于"prototype"
由于Javascrīpt并没有在系统内部并未使用过“继承”(很大可能),所以class下的prototype得到的全是
顶层Object,后期在继承的时候,我们可以看到这样的一个式子:
child.prototype=newparent();
继承两字带引号的意思是说就算有继承也并非真正意义上的继承,也只是通过prototype巧接得到。
用实例扩展一个方法到类,这儿不得不提及__proto__这个属性
复制代码 代码如下:<scrīptLANGUAGE="Javascrīpt">
<!--
functionabc(){
varōwner=this;
owner.k="pp";
owner.abc=function(){
}
}
abc.prototype.def=function(){
}
vars=newabc();
for(vartinabc.prototype){
alert("prototype指向:"+t+"="+abc.prototype[t]);
}
for(vartins.__proto__){
alert("__proto__指向:"+t+"="+s.__proto__[t]);
}
//-->
</scrīpt>在ff下我看可以看到实例名.__proto__=类.prototype,现在通过实例扩展一个方法,这儿在实际应用当中并不推荐这样做,下例:
s.__proto__.hjk=function(){
return"hjk";
}
alert(s.hjk());
for(vartinabc.prototype){
alert("prototype指向:"+t+"="+abc.prototype[t]);
}
这下应该明白了吧。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
上几节讲了JavaScript面向对象之命名空间、javascript面向对象的JavaScript类与JavaScript面向对象的之私有成员和公开成员,大家
本文实例讲述了JavaScript面向对象。分享给大家供大家参考,具体如下:JavaScript面向对象this:this代指对象(pythonself)对象=
JavaScript是一门面向对象的语言。在JavaScript中有一句很经典的话,万物皆对象。既然是面向对象的,那就有面向对象的三大特征:封装、继承、多态。这
尽管面向对象JavaScript与其他语言相比之下存在差异,并由此引发了一些争论,但毋庸置疑,JavaScript具有强大的面向对象编程能力本文先从介绍面向对象
javascript面向对象继承的简单实例:作为一门面向对象的语言,继承自然是它的一大特性,尽管javascript的面向对象的实现机制和和c#和java这样典