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 源码分析笔记(7) Queue
Jun 19 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
JS 实现Json查询的方法实例
Apr 12 Javascript
使用Math.floor与Math.random取随机整数的方法详解
May 07 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 Javascript
JavaScript初学者必看“new”
Jun 12 Javascript
JS实现页面打印(整体、局部)
Aug 18 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 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
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
高三英语教学反思
2014/01/13 职场文书
购房意向书
2014/08/30 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
2015年招生工作总结
2015/05/04 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书