JavaScript入门教程(12) js对象化编程


Posted in Javascript onJanuary 31, 2009

with 语句 为一个或一组语句指定默认对象。
用法:
with (<对象>) <语句>;
with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10);
y = Math.tan(14 * Math.E);
当使用 with 语句时,代码变得更短且更易读:

with (Math) { 
x = cos(3 * PI) + sin(LN10); 
y = tan(14 * E); 
}

this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
一个常用的 this 用法:
<script> 
... 
function check(formObj) { 
... 
} 
... 
</script> 
<body ...> 
... 
<form ...> 
... 
<input type="text" ... onchange="check(this.form)"> 
... 
</form> 
... 
</body>

这个用法常用于立刻检测表单输入的有效性。
自定义构造函数 我们已经知道,Array(),Image()等构造函数能让我们构造一个变量。其实我们自己也可以写自己的构造函数。自定义构造函数也是用 function。在 function 里边用 this 来定义属性。
function <构造函数名> [(<参数>)] { 
... 
this.<属性名> = <初始值>; 
... 
}

然后,用 new 构造函数关键字来构造变量:
var <变量名> = new <构造函数名>[(<参数>)];
构造变量以后,<变量名>成为一个对象,它有它自己的属性——用 this 在 function 里设定的属性。
以下是一个从网上找到的搜集浏览器详细资料的自定义构造函数的例子:
function Is() { 
var agent = navigator.userAgent.toLowerCase(); 
this.major = parseInt(navigator.appVersion); //主版本号 
this.minor = parseFloat(navigator.appVersion);//全版本号 
this.ns = ((agent.indexOf('mozilla')!=-1) && 
((agent.indexOf('spoofer')==-1) && //是否 Netscape 
(agent.indexOf('compatible') == -1))); 
this.ns2 = (this.ns && (this.major == 3)); //是否 Netscape 2 
this.ns3 = (this.ns && (this.major == 3)); //是否 Netscape 3 
this.ns4b = (this.ns && (this.minor < 4.04)); //是否 Netscape 4 低版本 
this.ns4 = (this.ns && (this.major >= 4)); //是否 Netscape 4 高版本 
this.ie = (agent.indexOf("msie") != -1); //是否 IE 
this.ie3 = (this.ie && (this.major == 2)); //是否 IE 3 
this.ie4 = (this.ie && (this.major >= 4)); //是否 IE 4 
this.op3 = (agent.indexOf("opera") != -1); //是否 Opera 3 
this.win = (agent.indexOf("win")!=-1); //是否 Windows 版本 
this.mac = (agent.indexOf("mac")!=-1); //是否 Macintosh 版本 
this.unix = (agent.indexOf("x11")!=-1); //是否 Unix 版本 
} 
var is = new Is();

这个构造函数非常完整的搜集了浏览器的信息。我们看到它为对象定义了很多个属性:major, minor, ns, ie, win, mac 等等。它们的意思见上面的注释。把 is 变量定义为 Is() 对象后,用 if (is.ns) 这种格式就可以很方便的知道浏览器的信息了。我们也可以从这个构造函数中看到,它也可以使用一般的 JavaScript 语句(上例中为 var 语句)。
让我们再来看一个使用参数的构造函数:
function myFriend(theName, gender, theAge, birthOn, theJob) { 
this.name = theName; 
this.isMale = (gender.toLowerCase == 'male'); 
this.age = theAge; 
this.birthday = new Date(birthOn); 
this.job = theJob 
} 
var Stephen = new myFriend('Stephen', 'Male', 18, 'Dec 22, 1982', 'Student');

从这个构造函数我们不但看到了参数的用法,还看到了不同的属性用不同的数据型是可以的(上例五个属性分别为:字符串,布尔值,数字,日期,字符串),还看到了构造函数里也可以用构造函数来“构造”属性。如果用了足够的“保护措施”来避免无限循环,更可以用构造函数自身来构造自己的属性。
Javascript 相关文章推荐
jQuery get和post 方法传值注意事项
Nov 03 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
jquery简单实现幻灯片的方法
Aug 03 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
Nov 18 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
如何在Express4.x中愉快地使用async的方法
Nov 18 Javascript
JavaScript入门教程(11) js事件处理
Jan 31 #Javascript
JavaScript入门教程(10) 认识其他对象
Jan 31 #Javascript
JavaScript入门教程(9) Document文档对象
Jan 31 #Javascript
JavaScript入门教程(8) Location地址对象
Jan 31 #Javascript
JavaScript入门教程(7) History历史对象
Jan 31 #Javascript
JavaScript入门教程(6) Window窗口对象
Jan 31 #Javascript
JavaScript入门教程(5) js Screen屏幕对象
Jan 31 #Javascript
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP 一个页面执行时间类代码
2010/03/05 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
React diff算法的实现示例
2018/04/20 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python_LDA实现方法详解
2017/10/25 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Python元组常见操作示例
2019/02/19 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
夏季药店促销方案
2014/08/22 职场文书
大学生实习证明范本
2014/09/19 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书