12JavaScript自定义对象、事件

自定义对象

自定义对象概述

  • 是一种特殊的数据类型,由属性和方法封装而成

  • 属性是指与对象有关的值:对象名.属性名

  • 方法是指对象可以执行的行为或可以完成的功能:对象名.方法名()

创建对象

直接创建对象

  • 使用构造器创建对象

  • 使用JSON创建对象

    JavaScript Object Notation是一种轻量级的数据交换格式

创建的方式

  • a)直接量(JSON),使用名/值对的方式定义

     {“name”: “zs”,
    
      “age”:23 }
    

    { }代表一个对象,内含多组键值对

    key一般是字符串

    value可以是任何类型变量

  • b) 构造器(new的函数/首字母大写)

    • 内置构造器:

      特殊:String(), Date(), RegExp(), Function()

      通用:Object()

    • 自定义构造器:

      声明函数,首字母大写

      声明参数,明确指示调用者传入参数

      对象要记录这些参数

        <script>
      
        //采用直接量的方式创建对象
        function f1() {
        	var student = {
        		"name": "Zhangsan",
        		"age": 23,
        		"work": function() {
        			alert("I am a java learner");
        		}
        	};
        	alert(student.name);
        	alert(student.age);
        	student.work();
        }
        
        
        //采用内置构造器创建对象
        function f2() {
        	var teacher = new Object();
        	teacher.name = "Mr. Li";
        	teacher.age = 18;
        	teacher.work = function(){
        		alert("I am teaching java");
        	};
        	alert(teacher.name);
        	alert(teacher.age);
        	teacher.work();
        }
        
        //采用自定义构造器创建对象——大写
        function Coder(name, age, work) {
        	this.name = name;
        	this.age = age;
        	this.job = work;
        }
        
        function f3() {
        	var coder = new Coder(
        		"List", 28, function() {
        			alert("I am coding");
        	}
        );
        	alert(coder.name);
        	alert(coder.age);
        	coder.job();
        }
        </script>
      
        <body>
        	<input type="button" value="button1" onclick="f1()">
        	<input type="button" value="button2" onclick="f2()">
        	<input type="button" value="button3" onclick="f3()">
        </body>
      

总结:

无论采用哪种方式创建出来的对象本质只是方式不同

如果对象需要给其他人使用,使用自定义方式。若只是自己使用,建议使用直接量或者内置构造器方法。

事件

事件概述:

事件概述、事件属性、事件定义

  • event对象

event对象、获取event对象、使用event对象

事件处理机制

事件处理机制

  • 事件概述:

    用户的操作、动作,即JS调用的时机

  • 事件属性:

    通过一个事件属性,可以在某个事件发生时对某个元素进行某种操作

  • 鼠标事件

    onclick ondblclick onmouseover onmouseout

  • 键盘事件

    onkeydown onkeyup

  • 状态事件:达到某条件自动触发

    onload onchange onblur onsubmit

    • onchange()事件一般用于用户表单中,例如:当文本框内容发生改变时触发的事件,或者下拉列表框内容发生改变时触发的事件等。

    • onblur:当输入域失去焦点时————未选中

    • onfocus:当输入域获取焦点时————选中

        <script>
        $(document).ready(function(){
          $("input").focus(function(){
            $("input").css("background-color","#FF0000");
          });
          $("input").blur(function(){
            $("input").css("background-color","#0000FF");
          });
        });
        </script>
        <body>
        Enter your name: <input type="text" />
        <p>请在上面的输入域中点击,使其获得焦点,然后在输入域外面点击,使其失去焦点。</p>
        </body>
      

在这里插入图片描述

事件定义:

  • 直接绑定

    在元素上通过事件属性定义事件,如οnclick="f1();"

    优点:直观

    缺点:耦合度高

  • 后绑定

    在页面加载后获取节点,使用js给它追加一个事件

    优点:耦合度低

    缺点:不直观

event对象

任何事件触发后将会产生一个event对象
  • event对象记录事件发生时的鼠标位置、键盘按键状态和触发对象等信息

    获得event对象

    使用event对象获得相关信息,如单击位置、触发对象等

  • 常用属性:

    clientX/ clientY/ cancelBubble等

获取event对象:需要考虑浏览器兼容性

  • a) IE浏览器:JS或者HTML代码中直接使用event

      <p onlick=”alert(event.client);”>p text</p>
      <div onclick=”f1();”>div text</div>
      function f1() {
      	alert(event.clientX+”: ”+event.clientY);
      }
    
  • b) Firefox浏览器

      HTML代码中直接使用event
      
      HTML代码中直接使用event
      	<p onclick=”alert(event.clientX);”>p text</p>
      JS代码中直接使用event关键字————不能直接使用
      	<div onclick=”f1();”>div text</div>
      	function f1() {
      		alert(event.clientX+”: ”+event.clientY);
      	}
    

    ReferenceError: event is not defined

在HTML代码中,在事件句柄定义时,使用event关键字将事件对象作为参数传入

<div onclick=”f1(event);”>div text</div>
function f1(e) {
	alert(e.clientX+”: ”+e.clientY);
}


<script>
	//直接绑定事件
	function f1(e) {	
		console.log(“direct”);	
		console.log(e);
}
	//页面加载后
	window.onload = function(){
		//给button2绑定单击事件
		var btn = document.getElementById(“btn2”);
		btn.onclick = function(e) {
			console.log(“indirect”);
			console.log(e);
	};
}
</script>
<body>
	<input type=”button” value=”button1” onclick=”f1(event);”/>
	<input type=”button” value=”button2” id=”btn2”/>
</body>

在这里插入图片描述

在这里插入图片描述

case:calculate

功能实现:按钮输入数字及表达式

<style>
.panel {	
	border: 4px solid #ddd;	width: 192px;	margin: 100px auto;
}

.panel p, .panel input {	
	font-family: “微软雅黑”; 	font-size: 20px;	margin: 4px;	float: left;
}

.panel p {
	width: 122px;	height: 26px; border: 1px solid #ddd;	padding: 6px; overflow: hidden;
}

.panel input {	
	width:40px; height: 40px; border: 1px solid #ddd;		
}
</style>

<script>
	window.onload = function() {
		//给div绑定单击事件
		var div = document.getElementById(“calculate”);
		div.onclick = function(e) {
			//获取事件源
			var obj = e.srcElement || e.target;
			if( obj.nodeName == “INPUT” ) {
				var p = document.getElementById(“screen”);
				if( obj.value == “=” ) {
					//计算
					try {
						p.innerHTML = eval(p.innerHTML);
					} catch(e) {
						p.innerHTML = “Error”;
					}
				} else if( obj.value == “C”) {
					//清空
					p.innerHTML = “”;
				} else {
					//累加
					p.innerHTML += obj.value;
				}
			}
		};
	}
</script>


<body>
	<div class=”panel” id=”calculate”>
		<div>
			<p id=”screen”></p>
			<input type=”button” value=”C”>
			<div style=”clear:both”></div>	<!-- 消除前两行浮动影响 -->
		</div>
	
		<div>
			<input type=”button” value=”7”/>
			<input type=”button” value=”8”/>
			<input type=”button” value=”9”/>
			<input type=”button” value=”/”/>
			
			<input type=”button” value=”4”/>
			<input type=”button” value=”5”/>
			<input type=”button” value=”6”/>
			<input type=”button” value=”*”/>
			
			<input type=”button” value=”1”/>	
			<input type=”button” value=”2”/>
			<input type=”button” value=”3”/>
			<input type=”button” value=”-”/>
			
			<input type=”button” value=”0”/>
			<input type=”button” value=”.”/>
			<input type=”button” value=”=”/>
			<input type=”button” value=”+”/>
		
			<div style=”clear:both”></div>
		</div>
	</div>
</body>

在这里插入图片描述

取消事件:

return false;

事件对象:

什么是事件对象:

在某些特定情况下,需要获取事件发生时的鼠标坐标,键盘按键等信息

这些和时间相关的特殊信息被浏览器封装在一个对象里:event

这个由浏览器提供、和事件相关的对象,称为时间对象

##如何获得事件对象:

  • 直接绑定事件时

    调用函数时,直接传入event对象,函数增加参数获取该对象

  • 后绑定事件时

    调用函数时,浏览器会自动传入event,函数增加参数接收该对象

事件冒泡:

什么是事件冒泡:

事件触发的顺序是由内向外的

如何取消事件冒泡:

通过事件对象的API

事件冒泡的作用:

可以简化事件的定义

case:bubble event

<style>
	div{	border/width/padding.. }
	p {	border/padding	}
</style>
<script>
	function f1(e) {
		alert(“BUTTON”);
		//取消冒泡
		//e={“stopPropagation”:function() {} }
		//e={“cancelBubble”:false }
		if(e.stopPropagation) {
			e.stopPropagation();
		} else {
			e.cancelBubble = true;
		}
	}
</script>
<body>
	<div onclick=”alert(‘DIV’)”>
		<p onclick=”alert(‘P’)”>
			<input type=”button” value=”button1” onclick=”f1(event);”/>
		</p>
	</div>
</body>

事件源:

事件发生的具体位置/来源

通过事件对象获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值