动态选择方法及属性

使用方括号操作符,比点操作符功能更强大。因为可以在[ ]方括号中使用任何代表成员名称的内容访问对象。包括字面量,保存着成员名称的变量,名称组合,三元操作符。所有这些内容都会被处理成一个字符串,然后javascript会用这个字符串来寻找对应的成员。

  • 使用方括号操作符
 object['propertyName']    //=>object.propertyName
object['methodName'](arg1) //=>object.methodName(arg1)
  • 切换行为
element[shoouldBeVisible ? 'show' : 'hide']();
//IE,假设这里已经有一个isIE变量
element[isIE ? 'simpleEffect' : 'complexEffect']() ;
  • 拼接方法名称
element[ (enable ? 'add'  : 'remove' ) + 'className' ] ('enabled' ) ;

通过模块模式实现代码访问控制

随着javascript代码库越来越大,全局作用域被“污染”的可能性也就越来越大。这样不仅会导致命名冲突,也为bug提供了温床。
于是,模块模式结实解决这些问题的。模块模式的主要思想是,为那些通过var关键字声明的标识符和函数创建一个私有作用域,只有定义在这个作用域里的函数才能直接访问这些数据。
为了使外界能够访问到汉书里的部分内容,我们有两个选择。其一是返回一个包含选定值的对象,然后把这个对象赋给外界的变量;另一种则是给函数传入一个外部作用域可访问的对象作为参数,使该函数能在这个对象中写入自己的属性(如果想让他的属性成为全局属性,只需传入window对象)。
 
javascript 中,使用var关键字申明的标识符是局部的(它们只属于当前定义的作用域)。而未使用var关键字申明的标识符是全局的。(它们会被嫁接到当前默认的作用域,而默认作用域在多数情况下就是全局的window对象)。
 
 在匿名函数中使用var关键字:
//在匿名函数中使用var关键字
(function(){
var privateField = 42;
function innerFunc(){
notSoPrivate = 43 ;
return notSoPrivate ;
}
alert(privateField); //==>42
innerFunc();
alert(notSoPrivate) ;//=>43
})();
alert(typeof privateField); //=>Undefined
alert(notSoPrivate); //=>43 (变量被泄露到外部)
 私有属性:
//试试这个例子:“私有属性”
var obj = (function(){
var privateField = 42 ;
var publicField = 'footbar' ;
function processInternals(){
alert('Internal stuff:'+privateField);
}
function run(){
processInternals();
alert('still private stuff:'+privateField);
alert('public stuff:'+publicField);
}
return{
publicField:publicField,
run:run
};
})();
obj.run();//3个alert都弹出
obj.publicField ;//footbar
obj.processInternals();//Undefined
obj.privateField ;//Undefined

使用可选/可变/命名参数

为参数“空值”给出明确定义:
rant = rant||"IE8 must die!";
为了获得函数自身引用,使用arguments的特殊属性callee(返回正在执行的Function对象).
//申明参数(命名参数)
function repeat(rant,times){
while(--times>=0){
alert(rant);
}
}
repeat('IE8 must die!',5); //=>连续弹出5个对话框
动态获得不定数量的参数
内置的arguments变量允许你动态访问函数的参数
这使你可以模拟其他语言的可变参数列表
//模拟可变参数列表
function repeat(times){
while(--times>=0){
for(var index = 1,len=arguments.length;index<len;++index){
alert(arguments[index]);
}
}
}
repeat(2,'IE8 must die!','So should IE7...');//==>连续弹出4个对话框

//为可选参数设置默认值
function repeat(times,rant){
if(undefined ===rant){
rant = 'IE8 must die!';
}
while(--times>=0){
alert(rant);
}
}
repeat(3);//==>连续弹出3个IE8对话框
repeat(3,'So should IE7 do..');//==>连续弹出3个有关IE7的对话框

 
用字面量对象实现伪命名参数
//用字面量对象实现伪命名参数
function repeat(options){
options = options || {} ;
for(var opt in(repeat.defaultOptions || {})){
if(!(opt in options){
options[opt] = repeat.defaultOptions[opt];
}
}
for(var index = 0 ;index<options.times;++index){
alert(options.rant);
} }
repeat.defaultOptions = {times;2,rant:'IE8 must die!'} ; repeat() ;//==>弹出2个与IE8有关的对话框
repeat({times:3});//==>弹出3个与IE8有关的对话框
repeat({times:2,rant:'Flash must die!'}); //弹出2个与Flash有关的对话框

javascript进阶修炼之一——javascript必备操做的更多相关文章

  1. javascript进阶修炼之二——DOM,事件及定时器

    获得DOM元素的引用 首先注意以下几点:   注意document.getElementById,任何依赖于这个方法的代码都会成为IE怪异行为的牺牲品.因为在IE中,这个方法也会通过name属性来寻找 ...

  2. JavaScript进阶(六)用JavaScript读取和保存文件

    用JavaScript读取和保存文件 因为Google还不提供同步插件数据的功能,所以导入和导出插件配置就必须和文件打交道了.而出于安全原因,只有IE才提供访问文件的API:但随着HTML 5的到来, ...

  3. JavaScript 进阶教程一 JavaScript 中的事件流 - 事件冒泡和事件捕获

    先看下面的示例代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jav ...

  4. 4、JavaScript进阶篇①——基础语法

    一.认识JS 你知道吗,Web前端开发师需要掌握什么技术?也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HTML+CSS创建一个漂亮的页面,但这还不够,它只是静态页面 ...

  5. JavaScript 进阶(一)JS的"多线程"

    这个系列的文章名为“JavaScript 进阶”,内容涉及JS中容易忽略但是很有用的,偏JS底层的,以及复杂项目中的JS的实践.主要来源于我几年的开发过程中遇到的问题.小弟第一次写博客,写的不好的地方 ...

  6. JavaScript进阶(一)

     OK接下来,我们再次梳理一遍js并且提高一个等级. 众所周知,web前端开发者需要了解html和css,会只用html和css创建一个漂亮的页 面,但是这肯定是不够的,因为它只是一个静态的页面,我们 ...

  7. JavaScript进阶(九)JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

  8. JavaScript进阶(十一)JsJava2.0版本

    JavaScript进阶(十一)JsJava2.0版本 2007年9月11日,JsJava团队发布了JsJava2.0版本,该版本不仅增加了许多新的类库,而且参照J2SE1.4,大量使用了类的继承和实 ...

  9. javascript基础修炼(2)——What's this(上)

    目录 一.this是什么 二.近距离看this 三. this的一般指向规则 四. 基本规则示例 五. 后记 开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一.thi ...

随机推荐

  1. Python简易项目 加减计算器的实现

    Python Calculator 1.0 支持功能:add.minus 输入表达式不含括号,允许不加'=' 非常简单的一个小计算器,还缺少很多功能,目的是为了练练手. 日后会对其进行更新. 源码 G ...

  2. arm-linux-gcc安装使用教程

    arm-linux-gcc如何下载安装2(转) [转]ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 ) 2009-03-03 10:05 1.下载arm-li ...

  3. zoom:1;

    zoom:1;属性是IE浏览器的专有属性,可以设置或检索对象的缩放比例.触发ie的hasLayout属性.清除浮动.清除magin的重叠等. 注意:它未通过W3C验证.

  4. 开机启动服务(ftp、apache、mysql)

    当linux服务器开机时,会将 /etc/rc.d/rc.local 中的指令全部执行一遍, 因此将相应服务的启动指令放到该shell脚本中即可实现开机启动效果; 在 /etc/rc.d/rc.loc ...

  5. Ubuntu 14.04配置虚拟主机

    虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apa ...

  6. Codeforces Round #378 (Div. 2)F - Drivers Dissatisfaction GNU

    http://codeforces.com/contest/733/problem/F 题意:给你一些城市和一些路,每条路有不满意程度和每减少一点不满意程度的花费,给出最大花费,要求找出花费小于s的最 ...

  7. POJ 1568 极大极小搜索 + alpha-beta剪枝

    极小极大搜索 的个人理解(alpha-beta剪枝) 主要算法依据就是根据极大极小搜索实现的. 苦逼的是,查了两个晚上的错,原来最终是判断函数写错了..瞬间吐血! ps. 据说加一句 if sum & ...

  8. Python之路,Day8 - 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  9. L169 Komodo dragons

    Komodo dragons live on a handful of islands in Indonesia, but their reputation has spread far and wi ...

  10. 关于PHP页面显示乱码问题的解决

    关于PHP页面显示乱码问题的解决 网页乱码一直是网络编程高手都头痛的问题,我是一个PHP Web编程的初学者,学习当中也遇到了这个问题,查找了相关的资源,总结如下: 一般的中文编码:gb2312,gb ...