面向对象--传统的过程式和面向对象式编写选项卡
来源:互联网 发布:ubuntu 复制文字 编辑:程序博客网 时间:2024/06/08 10:49
现在,有这样一个布局
<style>#div1 div{ width:200px; height:200px; border:1px #000 solid; display:none;}.active{ background:red;}</style><body><div id="div1"> <input class="active" type="button" value="1"> <input type="button" value="2"> <input type="button" value="3"> <div style="display:block">11111</div> <div>22222</div> <div>33333</div></div></body>
用传统的过程式编写选项卡
window.onload = function(){ var oParent = document.getElementById('div1'); var aInput = oParent.getElementsByTagName('input'); var aDiv = oParent.getElementsByTagName('div'); for(var i=0;i<aInput.length;i++){ aInput[i].index = i; aInput[i].onclick = function(){ for(var i=0;i<aInput.length;i++){ aInput[i].className = ''; aDiv[i].style.display = 'none'; } this.className = 'active'; aDiv[this.index].style.display = 'block'; }; }};
用面向对象方式编写选项卡
面向对象的选项卡
原则
- 先写出普通的写法,然后改成面向对象写法
a.普通方法变型
- 尽量不要出现函数嵌套函数
- 可以有全局变量
- 把onload中不是赋值的语句放到单独函数中
下面开始变形
<script>var oParent = null;var aInput = null;var aDiv = null;window.onload = function(){ oParent = document.getElementById('div1'); aInput = oParent.getElementsByTagName('input'); aDiv = oParent.getElementsByTagName('div'); init(); };function init(){ for(var i=0;i<aInput.length;i++){ aInput[i].index = i; aInput[i].onclick = change; }}function change(){ for(var i=0;i<aInput.length;i++){ aInput[i].className = ''; aDiv[i].style.display = 'none'; } this.className = 'active'; aDiv[this.index].style.display = 'block';}</script>
b.改成面向对象
- 全局变量就是属性
- 函数就是方法
- Onload中创建对象
- 改this指向问题 : 事件或者是定时器,尽量让面向对象中的this指向对象
<script>window.onload = function(){ var t1 = new Tab(); t1.init(); };function Tab(){ this.oParent = document.getElementById('div1'); this.aInput = this.oParent.getElementsByTagName('input'); this.aDiv = this.oParent.getElementsByTagName('div');}Tab.prototype.init = function(){ var This = this; for(var i=0;i<this.aInput.length;i++){ this.aInput[i].index = i; this.aInput[i].onclick = function(){ This.change(this); }; }};Tab.prototype.change = function(obj){ for(var i=0;i<this.aInput.length;i++){ this.aInput[i].className = ''; this.aDiv[i].style.display = 'none'; } obj.className = 'active'; this.aDiv[obj.index].style.display = 'block';};</script>
复习this指向
<script>oDiv.onclick = function(){ this : oDiv};oDiv.onclick = show;function show(){ this : oDiv}oDiv.onclick = function(){ show();};function show(){ this : window}</script>
阅读全文
0 0
- 面向对象--传统的过程式和面向对象式编写选项卡
- 面向对象及组件开发(七)传统选项卡和面向对象选项卡编写
- 过程式设计和面向对象设计的比较
- 过程式设计和面向对象设计的比较(组图)
- 过程式设计和面向对象设计的比较 .
- 面向对象和面向过程的区别
- 面向对象和面向工程的区别
- 面向对象和面向过程的区别
- 面向过程和面向对象的编程
- 《面向过程和面向对象的编程》
- 面向过程和面向对象的编程
- 面向过程和面向对象的区别
- 面向对象和面向过程的区别
- 面向对象和面向过程的区别
- 面向对象和面向过程的区别
- 面向对象和面向过程的区别
- 面向对象和面向过程的区别
- 面向对象和面向过程的区别
- windows/linux用命令配置IP
- 我想赚点下载币
- numpy的其他应用介绍
- 如何实施异构服务器的负载均衡及过载保护?
- 深入理解哈希表
- 面向对象--传统的过程式和面向对象式编写选项卡
- mybatis orm 表继承思考
- matplotlib绘制正弦和余弦曲线
- mt6735 录音界面上停止录音时的时长为什么有时比录音列表中多1秒
- 【leetcode】Reverse Integer(考虑溢出问题)
- 在C++代码中判断运行模式(debug、release)和环境(win32、64)
- matplotlib绘制随机散点图
- 楼层式的主页
- Java怎么成为编程界老大的?