动态选择方法及属性

使用方括号操作符,比点操作符功能更强大。因为可以在[ ]方括号中使用任何代表成员名称的内容访问对象。包括字面量,保存着成员名称的变量,名称组合,三元操作符。所有这些内容都会被处理成一个字符串,然后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. web.config文件配置解决网站上传大文件限制

    Asp.Net网站对上传文件的大小,请求执行的时间都做了限制,上传的文件如果超过限制或者执行上传时间超出, 文件上传都将失败. 因此,需要配置web.config来增加最大文件上传的大小和执行超时时间 ...

  2. java23种设计模式之二: 单例设计模式(6种写法)

    目的:在某些业务场景中,我们需要某个类的实例对象的只能有一个,因此我们需要创建一些单例对象. 本文共有6种写法,仅供参考 1.饿汉式 优点: 在多线程情况下,该方法创建的单例是线程安全的(立即加载) ...

  3. JavaScript权威指南--类型、值和变量

    本章要点图 数据类型:计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type ...

  4. 基于JQuery 的消息提示框效果代码

    提示框效果 一下是封装到 Jquery.L.Message.js 中的JS文件内容 var returnurl = ''; var messagebox_timer; $.fn.messagebox ...

  5. 设计模式--迭代器模式C++实现

    迭代器模式C++实现 1定义 他提供一种方法访问一个容器对象中的各个元素,而不暴漏该对象内部细节 注:迭代器是为容器服务的.迭代器模式提供了遍历容器的方便性,容器只管理增减元素就好,需要遍历时交给迭代 ...

  6. python 爬虫005-爬虫实例

    实例一:扒取猫眼电影TOP100 的信息 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 扒取猫眼电影TOP100 的 ...

  7. 从工程角度看C++观察者模式中的接口是否需要提供默认的实现

    在C++中,我们会经常用到观察者模式(回调模式,Delegate模式等,意思都一样),比如当Source中的某个参数发生了变化时,我们通过观察者模式进行回调通知,下面是一个例子: class Sour ...

  8. php上传文件出现500错误

    问题: 能上传小于10k的文件,上传大于10k的文件就会报500错误 解决办法: 首先查看错误日志,看看报错是什么 其次查看client_body_temp的权限问题 关于client_body_te ...

  9. 在Linux下安装JDK环境

    解压java安装包到指定目录下,这里为/data/software/java/, 然后在/etc/profile添加以下内容: JAVA_HOME =/data/software/java/jdk1. ...

  10. 009PHP基础知识——运算符(二) 逻辑运算符

    <?php /**运算符(二) 逻辑运算符: */ //1.逻辑与 and或&& 左右两边表达式均成立TRUE ,返回真值: /*$uname='admin'; $upwd='l ...