JavaScript的面向对象(一)


Posted in Javascript onNovember 09, 2006

一。传统的基于原型(Prototype)的做法
确切地说Javascrīpt的“类”在严格意义上来讲并不能算真正的类,从其声明的对象到类(估切这么说)有这样一个关系:
Instance.__proto__=InstanceClass.prototype(ie不支持)
以上说明:实例的属性(__proto__)等于类的prototpye,我们可以看出,实例的"__proto__"正好巧接在类的"prototype"上,通过原型链(prototype)来查找其方法并扩展,我们会发现其方法(Method)与其属性(Property)都是Public(当然你也可以用Private,即不用this),而prototype其实就是一对象,用来记录方法做为一个集合
假设我们声明一个类A,可以如此
function A(){
this.className="ClassA";   //添加Public属性,正确来说类名应该是Private的
}
//添加一方法
A.prototype.getClassName=function(){
return this.className;          //this指代A,而不是prototype
}
//声明一对象
var AObj=new A();
alert(AObj.__proto__==A.prototype);     //ie下无效,ff下为true,说明上面的验证是正确的
//我们来看看对象属性
/*
由于用了this,className即为Public,即可以随意修改或读取
如果要保护起来,就要用到Private,那么可以去掉其this前缀,做为保护
读的时候用一公开方法,即prototype下的方法:
A.prototype.getClassName=function(){
return className;                    //行不通,不存在,className是undefined
}
在这儿也只能约定一下,给className加上this,不要去直接去访问。在这一点上,的确不如第二种方法,稍
后会说明
*/
关于"prototype"
由于Javascrīpt并没有在系统内部并未使用过“继承”(很大可能),所以class下的prototype得到的全是 
顶层Object,后期在继承的时候,我们可以看到这样的一个式子:
child.prototype=new parent();
继承两字带引号的意思是说就算有继承也并非真正意义上的继承,也只是通过prototype巧接得到。
用实例扩展一个方法到类,这儿不得不提及__proto__这个属性

<scrīpt LANGUAGE="Javascrīpt">  
<!--  
function abc(){  
 var ōwner=this;  
 owner.k="pp";  
 owner.abc=function(){  
 }  
}  
abc.prototype.def=function(){  
}  
var s=new abc();  
for(var t in abc.prototype){  
 alert("prototype指向:"+t+"="+abc.prototype[t]);  
}  
for(var t in s.__proto__){  
 alert("__proto__指向:"+t+"="+s.__proto__[t]);  
}  
//-->  
</scrīpt> 
在ff下我看可以看到实例名.__proto__=类.prototype,现在通过实例扩展一个方法,这儿在实际应用当中并不推荐这样做,下例:
s.__proto__.hjk=function(){
  return "hjk";
}
alert(s.hjk());
for(var t in abc.prototype){
 alert("prototype指向:"+t+"="+abc.prototype[t]);
}
这下应该明白了吧。
Javascript 相关文章推荐
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
js获取下拉列表框中的value和text的值示例代码
Jan 11 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
JQuery动画与特效实例分析
Feb 02 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
javascript中一些util方法汇总
Jun 10 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
JavaScript的面向对象(二)
Nov 09 #Javascript
利用javascript查看html源文件
Nov 08 #Javascript
用javascript获得地址栏参数的两种方法
Nov 08 #Javascript
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 #Javascript
Ucren Virtual Desktop V2.0
Nov 07 #Javascript
非常不错的一个javascript 类
Nov 07 #Javascript
不错的一个日期输入 动态
Nov 06 #Javascript
You might like
preg_match_all使用心得分享
2014/01/31 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
python实现滑雪游戏
2020/02/22 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
python palywright库基本使用
2021/01/21 Python
python实现代码审查自动回复消息
2021/02/01 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
美国翻新电子产品商店:The Store
2019/10/08 全球购物
毕业证代领委托书
2014/09/26 职场文书
公司租房协议书
2014/10/14 职场文书
硕士学位论文评语
2014/12/31 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
导游欢迎词范文
2015/01/23 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
四风之害观后感
2015/06/09 职场文书
八年级历史教学反思
2016/02/19 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
java开发双人五子棋游戏
2022/05/06 Java/Android