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 相关文章推荐
cument.execCommand()用法深入理解
Dec 04 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
Aug 30 Javascript
JS给超链接加确认对话框的方法
Feb 24 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
Bootstrap面板使用方法
Jan 16 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
Feb 26 Javascript
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 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
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
20招让你的Python飞起来!
2016/09/27 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
python SOCKET编程基础入门
2021/02/27 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
西式婚礼证婚词
2014/01/12 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
离婚协议书标准格式
2014/10/04 职场文书
世界遗产导游词
2015/02/13 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书