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 相关文章推荐
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
javacript使用break内层跳出外层循环分析
Jan 12 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
详解jQuery中的easyui
Sep 02 jQuery
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
基于游标的分页接口实现代码示例
Nov 12 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
May 13 Javascript
JS不要再到处使用绝对等于运算符了
Apr 30 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
做一个有下拉功能的留言版
2006/10/09 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
javascript解析json实例详解
2014/11/05 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python 系统调用的实例详解
2017/07/11 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
销售心得体会
2014/01/02 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
生产车间标语
2014/06/11 职场文书
大连导游词
2015/02/12 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书