选项卡面向对象练习

Posted where there is a will, there i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选项卡面向对象练习相关的知识,希望对你有一定的参考价值。

面向对象的选项卡 原则 :先写出普通的写法,然后改成面向对象写法

普通方法变型:

  尽量不要出现函数嵌套函数

  可以有全局变量

  把onload中不是赋值的语句放到单独函数中

改成面向对象:

      全局变量就是属性

  函数就是方法

  Onload中创建对象

  改this指向问题

下面是普通代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		*{margin:0;padding:0;}
		input{padding:5px 10px;}
		input.on{background: red;}
		#div1 div{width:200px;height:200px;border:1px solid #ccc;display: none;}
	</style>
</head>
<body>
	<div id="div1">
		<input class="on" type="button" value="1">
		<input type="button" value="2">
		<input type="button" value="3">
		<div style="display:block;">111</div>
		<div>222</div>
		<div>333</div>
	</div>
	<script>
		//普通写法
		/*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++){
				//给每个input添加一个自定义属性index = 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 = \'on\';
					aDiv[this.index].style.display=\'block\';
				}
			}
		}*/

		/*
		普通方法先变型:
			尽量不要出现函数嵌套函数
			可以有全局变量
			把onload中不是赋值的语句放到单独函数中
		*/

		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++){
					//给每个input添加一个自定义属性index = 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 = \'on\';
				aDiv[this.index].style.display=\'block\';
			}
		}
	</script>
</body>
</html>

面向对象改写如下:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		*{margin:0;padding:0;}
		input{padding:5px 10px;}
		input.on{background: red;}
		#div1 div,#div2 div{width:200px;height:200px;border:1px solid #ccc;display: none;}
	</style>
</head>
<body>
	<div id="div1">
		<input class="on" type="button" value="1">
		<input type="button" value="2">
		<input type="button" value="3">
		<div style="display:block;">111</div>
		<div>222</div>
		<div>333</div>
	</div>
	<hr>
	<div id="div2">
		<input class="on" type="button" value="1">
		<input type="button" value="2">
		<input type="button" value="3">
		<div style="display:block;">111</div>
		<div>222</div>
		<div>333</div>
	</div>
	<script>
		//普通写法
		/*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++){
				//给每个input添加一个自定义属性index = 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 = \'on\';
					aDiv[this.index].style.display=\'block\';
				}
			}
		}*/

	/*
	改成面向对象
		全局变量就是属性
		函数就是方法
		Onload中创建对象
		改this指向问题
	*/


		window.onload = function(){
			var t1 = new Tab(\'div1\');
			t1.init();
			var t2 = new Tab(\'div2\');
			t2.init();
		};
		function Tab(id){
			this.oParent = document.getElementById(id);
			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 = \'on\';
				this.aDiv[obj.index].style.display=\'block\';
				
		}
	</script>
</body>
</html>

 效果如下:

 

 

以上是关于选项卡面向对象练习的主要内容,如果未能解决你的问题,请参考以下文章

js面向对象的选项卡

删除选项卡时在 ActionBar 选项卡片段中运行代码

以选项卡的故事扯扯js面向对象

选项卡执行android中下一个片段中存在的代码

纯JS制作选项卡--JavaScript实例集锦(初学)

面向对象选项卡组件