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 相关文章推荐
HTML中事件触发列表与解说
Jul 09 Javascript
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
jQuery 表单验证扩展(四)
Oct 20 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
Apr 28 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
jQuery使用数组编写图片无缝向左滚动
Dec 11 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
jquery 插件实现多行文本框[textarea]自动高度
Mar 04 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 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
桌面中心(四)数据显示
2006/10/09 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
php中的异常和错误浅析
2017/05/03 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
新闻记者实习自我鉴定
2013/09/19 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
关于爱情的广播稿
2014/01/16 职场文书
给面试官的感谢信
2014/02/01 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
护士自荐信范文
2015/03/25 职场文书
交通事故起诉书
2015/05/19 职场文书
800字作文之大雪
2019/12/04 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers