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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
Oct 24 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
Nov 21 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
Aug 15 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 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 selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python实现旋转和水平翻转的方法
2018/10/25 Python
python实现按日期归档文件
2021/01/30 Python
创立科技Java面试题
2015/11/29 面试题
思想汇报格式
2014/01/05 职场文书
三年大学自我鉴定
2014/01/16 职场文书
工艺员岗位职责
2014/02/11 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
医学生求职信
2014/07/01 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
Go语言入门exec的基本使用
2022/05/20 Golang