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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
JS高级笔记
Jul 13 Javascript
基于jQuery的获取标签名的代码
Jul 16 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
vue服务端渲染的实例代码
Aug 28 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
详解搭建一个vue-cli的移动端H5开发模板
Jan 17 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
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
php strcmp使用说明
2010/04/22 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
canvas实现钟表效果
2017/02/13 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Fabric 应用案例
2016/08/28 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
python字符串string的内置方法实例详解
2018/05/14 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
python如何读取bin文件并下发串口
2019/07/05 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
销售类个人求职信范文
2013/09/25 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2015年化验员工作总结
2015/04/10 职场文书
网络研修随笔感言
2015/11/18 职场文书
八年级数学教学反思
2016/02/17 职场文书
python实现简单的井字棋
2021/05/26 Python