动态选择方法及属性

使用方括号操作符,比点操作符功能更强大。因为可以在[ ]方括号中使用任何代表成员名称的内容访问对象。包括字面量,保存着成员名称的变量,名称组合,三元操作符。所有这些内容都会被处理成一个字符串,然后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学习札记(十九) 高级特性5 迭代器

    参考:迭代器 Note 1.可用于for循环的对象有两类:(1)集合数据类型:list tuple dict str set (2)Generator:生成器和含yield语句的函数.这些可以直接作用 ...

  2. Codeforces Round #341 (Div. 2) C. Mike and Chocolate Thieves 二分

    C. Mike and Chocolate Thieves time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  3. 二、nginx 安装目录详解

    rpm -ql nginx 路径 类型 介绍 /etc/logrotate.d/nginx  配置文件  Nginx 日志轮转,用于logrotate服务日志切割 /etc/nginx /etc/ng ...

  4. [spring]<context:component-scan/>使用

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. 《Think in Java》(十一)持有对象

    Java 中的持有对象就是容器啦,看完这一章粗略的了解了 Java 中的容器框架以及常用实现!但是容器框架中的接口以及实现类有好多,下午还得好好看看第 17 章--容器深入研究以及 Java 官方的文 ...

  6. java代码实现递归

    think in java 书中使用递归分析 代码如下: public class Snake implements Cloneable { private Snake next; private c ...

  7. 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法

    搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...

  8. 已经安装了node和npm,输入node -v 未找到命令

    昨天虚拟机上安装了nvm.node.npm,今天打开输入node -v,就显示未找到命令 输入nvm --version 发现还是有nvm版本的,不然都要以为刚配好的虚拟机又要重新安装... 再输入 ...

  9. jsp获取绝对路径

    在JavaWeb开发中,常使用绝对路径的方式引入javaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法是: 一.使用${pageContext.request. ...

  10. 037——VUE中表单控件处理之表单修饰符:lazy/number/trim

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...