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 相关文章推荐
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
JS获取鼠标坐标的实例方法
Jul 18 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
Nov 30 Javascript
Element-UI踩坑之Pagination组件的使用
Oct 29 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
关于JavaScript轮播图的实现
Nov 20 Javascript
vue实现省市区联动 element-china-area-data插件
Apr 22 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 压缩文件夹的类代码
2009/11/05 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
JS获取父节点方法
2009/08/20 Javascript
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
举例说明类变量和实例变量的区别
2016/06/30 面试题
毕业生求职推荐信
2013/11/04 职场文书
商场总经理岗位职责
2014/02/03 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
社区务虚会发言材料
2014/10/20 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
详解Python牛顿插值法
2021/05/11 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python