• javascript进阶修炼之一——javascript必备操做


    动态选择方法及属性

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

    • 使用方括号操作符
    1 object['propertyName']    //=>object.propertyName
    2 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有关的对话框
  • 相关阅读:
    mysql 存储过程 异常处理机制
    Maven 私服打包
    Flink(2):Flink的Source源
    Flink(1):Flink的基础案例
    最后一课
    我的获奖记录及 Important Dates in OI
    目录
    入坑 OI 三周年之际的一些感想
    洛谷 P3781
    Atcoder Typical DP Contest S
  • 原文地址:https://www.cnblogs.com/jsStudyjj/p/5009239.html
Copyright © 2020-2023  润新知