javascript 基础篇3 类,回调函数,内置对象,事件处理


Posted in Javascript onMarch 14, 2012
function 类名(参数表){ 
this.属性; 
...... 
this.函数; 
}

这样,函数和数据成员都是用“this.”来实现。
我们自己定义一个简单类student好了,然后再去构造它,并且实现一个输出函数。
<script LANGUAGE="JavaScript"> 
<!-- 
function student(a,b){ 
this.name = a; 
this.age=b; 
this.output=function(){ 
document.write("student: "+this.name+" age: "+this.age+"</br>"); 
} 
} 
var stu1=new student("Zhan Bo",20); 
var stu2=new student("Hu Yifei", 23); 
stu1.output(); 
stu2.output(); 
--> 
</script>

(喂这也太简单了吧魂淡(||| ̄— ̄)==o(#) ̄? ̄)? )
恩。。总之大体意思懂了就好了。。

匿名函数:
就是没有名字的函数 function(参数表){.......} 匿名函数是用完就被抛弃(好可怜 TvT)
回调函数:
常表现为一个函数的参数是另一个函数。其实这个状况常遇到的,比如java里给控件添加一个listener的时候,listener的参数其实是个函数。
这个函数我们就可以直接在参数里面new就可以了,就是做了个匿名函数,因为每个响应都是针对这个控件的,因此一般不会有再次需要的情况。
不过我们举个例子还是按正常的路子走。

<script LANGUAGE="JavaScript"> 
<!-- 
function Huidiao(a){ 
alert(typeof a);// for testing if the function has ran 
if(typeof a=='function') 
a(); 
} 
var test=function(){ 
document.write("this is testing."); 
} 
Huidiao(test); 
//--> 
</script>

(非常感谢二楼Arliang 指出错误!)
此处注意事项:
1.typeof a的类型function是小写,因为js大小写敏感,所以必须注意。
2.Huidiao(test) test不需要写出括号,因为它的参数就仅仅是一个变量,如果写成(test()),那么函数会执行test();这个函数,但是Huidao函数不执行,因为test()没有返回值,那个么Huidiao的参数其实是未定义的。
输出大家都想得到的。。
然后再说一句:Javascript中没有重载。不要痴心妄想了骚年~ㄟ( ̄v ̄ㄟ)

--------------------------------------------------------------------------------
接下来学习js里面的内置对象,其实我们已经接触过几个了。
常用的内置对象: String Date Math Array Number Globle
String大家都很懂的,var s="xxxxx"; 或者 var= new String("xxxx"); 意思差不多,至于String里涵盖的一些操作函数的话。。请自行下载javascript的API文档亲,我就不给连接了亲,自己搜搜吧~
提供一个在线的参考手册连接:点这里 https://3water.com/w3school/js/jsref_obj_string.htm (这个网站不错,有空可以看看~)
每个对象的数据成员和函数成员就都有了,老师在这里一直讲那些个函数,我都睡着了,其实根本没必要讲,用的时候看看就行了,熟了以后都不需要看就知道有什么啦~
然后稍微说一下Array这个对象,实际上JS并没有提供二维数组,but,我们可以通过嵌套来实现,比如
var array2=new Array(new Array(4), new Array(), new Array(1,2,3,4));
javascript 基础篇3 类,回调函数,内置对象,事件处理
最后,除了这些常用对象外,
还有一些全局的函数和事件也需要熟悉起来,
对应到文档里就是function和event两个部分。
事件处理:
事件处理是什么我觉得应该没有人不清楚吧,我也懒得写概念了,因为写了也没人会记住的?(???)?
然后,指定事件处理程序有三种方法:
第一:直接在HTML标记中指定 <标记.......事件="事件处理程序" .....>
第二:编写特定对象特定之间的javascript <script LANGUAGE="JavaScript" for="对象" event="事件"> ........ </script>
第三:在javascript中说明 <事件主角 - 对象><事件>=<事件处理程序>;
常用的事件罗列一下:

鼠标事件 键盘事件 HTML事件 变动事件
onclick              单击事件 ondblClick         双击事件 onmouseover   鼠标移到上方 onmouseout   鼠标离开事件  onmousedown 鼠标按下事件 onmouseup      鼠标放开事件 onselect           选中事件 onkeydown  按键事件 onkeypress  按下键事件 onkeyup       放开键事件 onload           窗口加载事件 onunload       窗口离开事件 onresize 改变窗口大小触发事件 onabort        中断事件 onerror         异常事件 onreset        按下重置按钮事件 onsubmit      提交事件 onblur        失去焦点事件 onfocus     获得焦点事件 onchange 值改变触发事件
第一种是最常用的,比如提交啊,保存啊之类的事件,有数据库相关操作的,都可以在script里面完成。我相信写过网页的同学肯定都接触过的,比如我们写一个简单的小例子:
<html> 
<head> 
<title>O.O</title> 
<script type="text/javascript" src="js/output.js"></script> 
<script LANGUAGE="JavaScript"> 
<!-- 
function alertW(){ 
alert("Button Clicked"); 
} 
--> 
</script> 
</head> 
<body> 
<input type="Button" value = "HTML" onclick="alertW();" > 
<!-- 
This is my JSP page. <br> 
--> 
</body> 
</html>

定义一个button,然后给它一个响应事件,其实就是第一种,当然,因为这个的响应非常简单,也可以在button控件那里直接这么写:
<input type="Button" value = "HTML" onclick="window.alert('Button Clicked')" > (这里注意下,alert()里面的字符串用单引号,不能用双重双引号。)
二者效果相同的。

javascript 基础篇3 类,回调函数,内置对象,事件处理

但对于第二种来说,用的很少,我百度了半天,查了window对象的事件,测试了许多,但是只有onload事件是可行的,代码如下:
<script LANGUAGE="JavaScript" for="window" event="onload"> 
alert("load successed"); 
--> 
</script>

然后经过我的仔细研究,许多事件,比如“onbeforeunload”等,都是只在IE中可行的,那么我们就毫不犹豫的放弃此方法就好。知道就行了。

PS 用百度搜一下“网页制作完全手册”,是个CHM的帮助文件,第一个出来的 新浪文件就可以下载,里面东西很全,需要的话就下载来参考吧~

javascript 基础篇3 类,回调函数,内置对象,事件处理

OK,第三种,据说在Ajax框架里大量使用,但是作为一个不会ajax的人。。。好吧,我们慢慢学起。
第三种稍微涉及了点下一部分要说的DOM。不过木有关系,不影响大局,第三种的格式看起来比较复杂,其实很简单。

在添加控件的时候,给控件一个ID,但后在javascript里面利用ID拿到这个控件,然后对它的各种事件进行操作,比如:

<body> 
<input type="text" value="JS Object" id="input"> 
<script type="text/javascript"> 
var inpt=document.getElementById("input"); 
inpt.onblur=function(){ 
alert("How can you abandon me~?"); 
} 
</script> 
</body>

这样,我们就给text文本框添加了一个事件响应,这里要强调一点:script响应必须写在控件声明之后,否则编译器就无法根据ID找到控件了。

PS,其实也可以根据name找到控件,但是还是建议用ID,因为name可以相同,id不可以相同

关于每个控件有哪些响应,可以在之前那个网站里翻翻,或者下载我说的那个手册,就可以了,下面的截图就是那个手册里关于input text控件的事件列表~当然不止这点,右边还有下拉条的~

javascript 基础篇3 类,回调函数,内置对象,事件处理

其实我还是比较推荐下载一下这个手册的,挺好的一工具。

简单介绍了事件处理后,我们学习一下Event对象

event对象代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。

在IE中可以用window.event获取,但是FF不行,所以为了兼容,采用如下策略。。程序猿们的智慧是伟大的。

function eventName(event){ 
event=event|| window.event; 
................. 
}

事件程序绑定:

<body 事件名称="eventName(event);"></body>

因为比较抽象,我们还是写个代码,心里踏实点。

<html> 
<head> 
<style> 
<!-- 
.divstyle 
{ 
position:absolute; 
width:120px; 
height:80px; 
border:3px outset #FFFF00; 
padding-left: 4px; 
} 
//--> 
</style> 
<title>testing</title> 
<script type="text/javascript" src="js/output.js"></script> 
</head> 
<body> 
<div id="fistdiv" class= "divstyle" onmousedown="clicked(event)"></div> 
<script type="text/javascript"> 
function clicked(event){ 
event=event||window.event; 
var s; 
s="coordinate-X :"+event.clientX; 
s+="\n"+"coordinate-Y: " +event.clientY; 
var obj=document.getElementById("fistdiv"); 
obj.innerText=s; 
obj.textContent=s; alert(s); 
} 
</script> 
</body> 
</html>

注意,此处感谢三楼 Aleax的帮助,我直接引用他的话并给出例子,关于div中的属性innerText:

FF里面的innerText不可用,替代方法: textContent
IE: oDiv.innerText = aString; oDiv.innerHTML = aString;
FF: oDiv.textContent = aString; oDiv.innerHTML = aString;

由于对于不认识的语句浏览器会忽略,我们可以直接像我上面写的,写出两行代码来迁就这俩,同时还有另一个办法可以让它缩为一句,就是obj.innerHTML=s;

这里顺便说下innerText和innerHTML的差别:innerText只接受文本,然后直接输出,但是innerHTML识别HTML语句,也就是说,如果写
innerText="<br>Hello" ; 那么输出就是:<br>Hello 如果写innerHTML="<br>Hello"那么输出是换行后的Hello。 javascript 基础篇3 类,回调函数,内置对象,事件处理

事件冒泡问题
事件冒泡问题其实就是,一个操作触发了多个响应,比如body定义了onclick的事件,body下面的div也定义了onclick事件,那点了div之后,先做了div的事件响应,然后向上冒泡,body的click事件也被触发了。
解决的办法也不麻烦,但是依旧要迁就IE和FF这俩好基友的矛盾:
IE里面阻止冒泡,使用: 事件对象.cancelBubble=true;
FF里面阻止冒泡,使用: 事件对象.stopPropagation(); (刚才查了一下,propagation [,prɔpə'ɡeiʃən] 的意思是繁殖,繁衍。。原谅我的词汇量吧TvT)
好了为了让这对好基友和谐相处,我们只好再做一个判断:

function xxxxx(event){ 
.........; 
if(event&&event.stopPropagation) //说明是个火狐 
event.stopPropagation(); 
else 
event.cancleBubble=true; 
}

当然,这个判断要写在下层的结点里,比如刚才的例子里,如果把它写在body的click事件里,那就是做无用功了。
--------------------------------------------------------------------------------
最后,一个小应用,是对输入的情况判断,我们注册网站的时候常遇到的:
代码如下:
<html> 
<head> 
<style> 
<!-- 
#checkspan 
{ 
display: none; 
color: #ff0000; 
} 
//--> 
</style> 
<title>testing</title> 
<script type="text/javascript" src="js/output.js"></script> 
</head> 
<body> 
Input: <input type="text" onblur="blured()" id="input"><span id="checkspan"></span> 
<script type="text/javascript"> 
function blured(){ 
var obj=document.getElementById("checkspan"); 
var s=document.getElementById("input").value; 
if(s.length<5) 
obj.innerHTML=" too short"; 
else{ 
obj.innerHTML=" correct"; 
obj.style.color="green" 
} 
obj.style.display="inline"; 
} 
</script> 
</body> 
</html>

效果如下:

javascript 基础篇3 类,回调函数,内置对象,事件处理

Javascript 相关文章推荐
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
Apr 06 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
jquery可定制的在线UEditor编辑器
Nov 17 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
@ResponseBody 和 @RequestBody 注解的区别
Mar 08 Javascript
node简单实现一个更改头像功能的示例
Dec 29 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
Jan 04 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
JS代码触发事件代码实例
Jan 02 Javascript
vue axios封装httpjs,接口公用配置拦截操作
Aug 11 Javascript
javascript 基础篇2 数据类型,语句,函数
Mar 14 #Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 #Javascript
JSON.stringify 语法实例讲解
Mar 14 #Javascript
33个优秀的 jQuery 图片展示插件分享
Mar 14 #Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
Mar 14 #Javascript
JQuery UI的拖拽功能实现方法小结
Mar 14 #Javascript
10款非常有用的 Ajax 插件分享
Mar 14 #Javascript
You might like
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
详解AngularJS 过滤器的使用
2018/06/02 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
node后端服务保活的实现
2019/11/10 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python使用re模块验证危险字符
2020/05/21 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
会计工作心得体会
2014/01/13 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
赔偿协议书
2015/01/27 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
工作一年自我鉴定
2019/06/20 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python