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 Ajax学习实例7 Ajax所有过程事件分析示例
Mar 23 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
js和as的稳定传值问题解决
Jul 14 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
jQuery EasyUI常用数据验证汇总
Sep 18 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
详解Vue.js项目API、Router配置拆分实践
Mar 16 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
vue-swiper的使用教程
Aug 30 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
Jul 03 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
Jul 30 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
python创建n行m列数组示例
2019/12/02 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
毕业生实习鉴定
2013/12/11 职场文书
供货协议书
2014/04/22 职场文书
安全协议书
2014/04/23 职场文书
车间核算员岗位职责
2014/07/01 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
司机岗位职责
2015/02/04 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书