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 相关文章推荐
基于jQuery的星级评分插件
Aug 12 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
Dec 01 Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
Oct 22 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
Sep 02 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
js常用的继承--组合式继承
Mar 06 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
Bootstrap实现可折叠分组侧边导航菜单
Mar 07 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
Jul 25 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 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 Javascript
php header Content-Type类型小结
2011/07/03 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
Python中的魔法方法深入理解
2014/07/09 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
浅谈Python 参数与变量
2020/06/20 Python
美国钻石商店:Zales
2016/11/20 全球购物
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
建筑自我鉴定
2013/10/19 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
高中军训感言1000字
2014/03/01 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python