• advance


    1.定义命名空间  ->>> 创建一个局部可用的对象,在对象中封装局部作用域内的有用代码.
        命名空间创建了一个新的局部作用域,将其他代码与完全作用域分开。避免命名冲突
     命名空间对象标识符需唯一。
      可以使用姓名或者字头作为名称的一部分,在定义中最好添加程序库的相关信息。
      在javascript中,可以定义一个对象来创建命名空间
             var  someNameSpace={
          someProperty:23,
          someMethod:function(){...}
       }
      定义后,可以使用对象标记法访问属性和方法:someNameSpace.someProperty和someNameSpace.someMethod()。
    2.创建一个配置对象
            对象在分布式代码中的另一种常见用途是作为配置工具,可以轻松地在多个项目上使用相同的javascript代码,而不需要找遍大量代码行,编辑具体值。
      配置对象的创建方法:
                  定义一个自定义对象,用其属性代表网站专用的设置
     var  CONFIG={
           host:'http://www.example.com',
           errorClass:'error',
        outputElement:'output',
        ...
         };
      以后,其他javascript代码可以引用配置对象里面的配置,如:
       elem.className=CONFIG.errorClass;

    3.创建自定义对象
        创建单个自定义对象,只需要创建一个类型为Object的新变量:
     如:
     var  obj={
             name:'xiaowei',
             gender:'male',
       getName:function(){
               return this.name;
               },
       getGender:function(){
                return this.gender;
               }     
          };

    4.创建自定义对象的多个实例----->>>使用一个函数作为对象生成器。
        举例:
         //1.使用构造函数构造对象
         function Employee(firstName ,lastName,department)
      {
      this.firstName=firstName;
      this.lastName=lastName;
      this.department=lastName;
      this.getName=function(){
                   return this.firstName+' '+this.lastName;
                   }
      };
      //2.使用new运算符生成对象(必须使用new)
         var  e1=new Employee('Jane','Doe','Acounting');//new一个Employee对象
         var  e2=new Employee('John','Smith','Human Resouse');//new 另外一个Employee对像
       注意:为了与javascript中其他对象表现一致,可以自定义对象的同时,定义toString()和valueOf()方法。

    5.javascript原型
        javascript是不同类型的面向对象语言,它是原型化的。意味着:所创建的对象继承自一个预定义模型(原型),而不是类定义。
     每个javascript对象都继承其原型中的属性和方法。
     原型链概念--->>> 举例说明:e1对象基于Employee原型,而Employee原型由基于Object,这种现象称为原型链。
               --->>>我们引用任何对象的属性和方法,javascript遍历原型链,寻找对应属性。
         --->>>javascript在到达根原型时停止遍历(Object原型为根原型),如果原型链中没有找到对应属性和方法,则返回undefined。
     为了区分对象内定义,还是原型链中的属性和方法,可以调用hasOwnProperty()方法,以需要区分的属性作为参数,(此方法在Object中已定义,因而所以对象都将继承)
       如:
       var  test={
                 thing:1  
             };
        test.hasOwnProperty('thing');//返回true
        test.hasOwnProperty('valueOf');//返回false
        添加原型方法:在javascript中,可以编辑对象的protype属性来修改原型的属性和方法
         如:下面添加一个新的方法
         function Employee(firstName ,lastName,department)
      {
      this.firstName=firstName;
      this.lastName=lastName;
      this.department=lastName;
      this.getName=function(){
                   return this.firstName+' '+this.lastName;
                   }
      };
      Employee.prototype.getNameBackwards=function(){//添加的原型方法。现在所有new 的Employee对象都可以使用此方法
      return this.lastName+','+this.firstName; 
      }

     追溯式修改原型的能力,甚至能修改内建于javascript的对象定义,如String.下面的代码为String添加一个trim()方法(如果String中还没有这个方法)
        if(typeof String.prototype.trim='undefined'){//创建向后兼容的对象
              String.prototype.trim=function(){
        return this.replace(/^s+|s+$/g,'');
        };
        }
      注意:尽管javascript允许修改原型,但原型的修改是全局的,会影响原型所有的实例,所以需谨慎使用
         如果只需在特定实例上使用一个函数,可以单独创建该函数,以该对象为参数调用它:    
      function  doSomeThing(obj){
          // Do  something with  obj;
       }
       也可以将函数定义添加到单个实例:
        var  obj={};
        obj.doSomeThing=function(){
               //Do  something with  this;   
              }

    7.使用闭包
        闭包是与其创建时所在作用域绑定的函数。这意味着:闭包函数可以使用函数创建时(在同一个作用域)已有的变量。
         粗略的说,可以在一下情形可能遇到闭包:
        ①在一个函数中定义另一个函数
        ②内部函数引用存在于外部函数中的变量(包括外部函数的参数)
        ③内部函数在外部函数运行停止后被调用
     举例说明:
          window.onload=function(){
              //设置变量,包含变量tasks
        document.getElementById('theForm').onsubmit=function(){
        tasks.push(t);   
        };    
       };
       onload函数只被调用一次:在页面加载时,该函数定义了tasks数组,
            在常规的非闭包的情况下,函数变量执行就不再可用,意味着tasks数组将在onload函数执行完后所有命令之后不再存在。
       在onload外部函数中定义另一个函数创建了闭包。所有闭包都要求在另一函数中定义,内部函数处理表单提交,将被调用许多次,
       但是调用的时间总是在外部函数结束执行之后。

  • 相关阅读:
    12.extern(转)
    QT错误笔记-Qt Creator needs a compiler set up to build. Configure a compiler in the kit options.
    11.static(转)
    C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间
    10.动态库
    【转载】pygame的斜线运动
    题解-python-CodeForces 227B
    题解-python-CodeForces 227A
    【笔记】Python简明教程
    Pyhton核心编程-Chap2习题-DIY
  • 原文地址:https://www.cnblogs.com/xiaowei-blog/p/3949738.html
Copyright © 2020-2023  润新知