爱易网
IT新闻
IT新闻
爱易资讯
网站搭建
云虚拟主机教程
云服务器教程
Apache教程
IIS教程
Nginx教程
网站策划
站长文章
推广教程
淘宝客教程
网页设计
HTML教程
XHTML教程
CSS教程
HTML5教程
CSS3教程
JavaSript基础
JQuery教程
Node.js教程
前端技术
Ajax教程
Js特效
Xml教程
平面设计
页面UI设计
photoshop教程
程序开发
AI人工智能
Asp教程
Php教程
Asp.Net教程
Net Core教程
C#教程
Java教程
Jsp教程
开发技术
微信小程序教程
Uniapp开发教程
微信公众号开发
Andriod教程
IOS教程
DOS教程
Python教程
Docker教程
Windows Container教程
数据库
MSSQL教程
MySQL教程
Redis教程
Access教程
Oracle教程
数据库教程
操作系统
Linux教程
Windows教程
MAC教程
Cisco教程
交换机教程
防火墙教程
搜索
爱易网页
JavaSript
Javascript种,prototype研究
Javascript种,prototype研究
日期:2014-05-16 浏览次数:20538 次
Javascript类,prototype研究。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试Javascript类</title> </head> <body> <div id="dbg"> </div> <script type="text/javascript"> function p(str) { if(str.indexOf('err')!=-1) str = '<font color="#ff0000">'+str+'</font>'; str = str.replace(/(pro_fun)/g,'<font color="#ff00ff">$1</font>'); str = str.replace(/(pub_fun)/g,'<font color="#0000ff">$1</font>'); g('dbg').innerHTML = g('dbg').innerHTML+'<br />'+str; } function g(id) { return document.getElementById(id); } function f1() { var pri_var = 'pri_var'; this.pub_var = 'pub_var'; this.pub_fun = function() { try{ p('pub_fun->pri_var:'+pri_var); }catch(e){ p('pub_fun->pri_var(err):'+e); } try{ p('pub_fun->pub_var:'+this.pub_var); }catch(e){ p('pub_fun->pub_var(err):'+e); } //--------------------------------------------- try{ p('pub_fun->pro_var:'+this.pro_var); }catch(e){ p('pub_fun->pro_var(err):'+e); } //--------------------------------------------- try{ this.pro_fun(); }catch(e){ p('cls.pub_fun->pro_fun(err):'+e); } } this.pub_chgv=function(){//注意下面有一个f1.prototype.pub_chgv,而被认可的是这个函数,ie9 ff this.pub_var = 'pub_var->pub_chgv'; this.pro_var = 'pro_var->pub_chgv'; p('pub_chgv->pub_var: '+this.pub_var); p('pub_chgv->pro_var: '+this.pro_var); } } f1.prototype.pro_var = 'pro_var'; f1.prototype.pro_fun = function(){ try{ p('pro_fun->pri_var:'+pri_var); }catch(e){ p('pro_fun->pri_var(err):'+e); } try{ p('pro_fun->pri_var:'+this.pri_var); }catch(e){ p('pro_fun->pri_var(err):'+e); } try{ p('pro_fun->pub_var:'+this.pub_var); }catch(e){ p('pro_fun->pub_var(err):'+e); } //--------------------------------------------- try{ p('pro_fun->pro_var:'+this.pro_var); }catch(e){ p('pro_fun->pro_var(err):'+e); } } f1.prototype.pub_chgv=function(){ this.pub_var = 'pub_var->pro_chgv'; this.pro_var = 'pro_var->pro_chgv'; p('pro_chgv->pub_var: '+this.pub_var); p('pro_chgv->pro_var: '+this.pro_var); } f1.prototype.pro_getv=function(){ p('<hr>pro_getv->pub_var: '+this.pub_var); p('pro_getv->pro_var: '+this.pro_var); p('pro_getv->pro_var: '+f1.pro_var+' <-- 这说明:将prototype增加的属性或者方法称为静态的方法或者属性并不正确,因为它不能不实例化直接调用'); } var CLA = new f1(); var clb = new f1(); CLA.pub_fun(); try{ f1.pro_getv(); }catch(e){ p('f1.pro_getv(err):'+e+' <-- 这说明:将prototype增加的属性或者方法称为静态的方法或者属性并不正确,因为它不能不实例化直接调用'); } //一个实例改变私有变量或者prototype变量,不会影响其它的实例的值(改变自己的prototype属性会复制一份给自己,根据作用于原理(从自身向上查),自己有一个复制之后,就不再受prototype影响) CLA.pub_chgv(); clb.pro_getv(); //--------------------------------------------- //一个实例改变增加或者改变方法属性,都不会影响其它实例 CLA.pro_getv=function(){ p('<hr><font color="#00ffff">new by instance</font> pro_getv->pub_var: '+this.pub_var); p('<font color="#00ffff">new by instance</font> pro_getv->pro_var: '+this.pro_var+' <--- 注意pro_var在前面通过CLA.pub_chgv()改变了值,它就不再是引用prototype的值了,因此它不受prototype的影响了'); p('<font color="#00ffff">new by instance</font> pro_getv->pro_var: '+f1.pro_var); } clb.pro_getv(); //--------------------------------------------- //通过原始类的.prototype去改变属性或者方法,会使所有的未通过实例自身改变属性或者方法的实例的也变化 f1.prototype.pro_var = 'pro_var changed'; f1.prototype.pro_getv=function(){ p('<hr>new 1 pro_getv->pub_var: '+this.pub_var); p('new 1 pro_getv->pro_var: '+this.pro_var); p('new 1 pro_getv->pro_var: '+f1.pro_var); } clb.pro_getv(); //CLA 通过实例自身改变过pro_g
上一篇: ssh如何知道删除实体成不成功
下一篇: 办好5个javascript细节,别让人看出你很烂
免责声明:
本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
相关资料
更多>
层拖动的时候怎么控制层不超过浏览器右边缘
ExtJs LoadMask相干的遮罩效果
怎么让自动执行循环的任务不受window.alert(“”)的弹出消息而暂停
JQuery比较两个数,并进行背景色填充 (有关问题升级了!难度加大了)
iframe掩藏父页面的代码
在客户端怎么实现这个无刷新的需求
struts2.1.8不认jsonplugin插件解决方法
input radio 如何提交数据啊
REDHAT5上 Tomcat6使用jsvc 自启动
推荐阅读
更多>
js里面如何删除一个动态产生的dom呢
一组checkbox的点击事件解决思路
关于弹出层的有关问题
gson对JSON的操作小结
JSP EL语法与根本使用
javascript 开释内存
求一格式的正则表达式,[英文和数字,{数字}],该怎么解决
这个javascript有什么有关问题啊
js有关问题,浏览器报错Cannot read property 'id' of undefined
Jquery的find(fn)手册上的例子,该如何处理
Javascript对象的属性姓名及值的获取
javascript的匿名函数写法跟应用
JS树结构的运用
EXTJS4两个ComboBox的数据源联动,解决遇到第二个ComboBox第二次以后显示忙的状态有关问题
JavaScript DOM 编程艺术电子书哪位高手有(中文版),
AJAX获取数据后,成功方法里的返回数据怎么声明成全局变量
js 先宣言后赋值
深入理解Struts2返回JSON数据的原理及具体应用范例
Extjs combobox valueNotFoundText不生效,该如何解决
关于一个遍历设置CSS样式的有关问题