javascript语言精粹学习记录一

Chapter2:语法基础(程序员的基础...老也记不住)
1、do while
     do{//先执行}while(判断)
2、for
     for(初始化;测试操作是否进入下个循环;更新条件){//statement}
    continue:进入下一个循环中
3、try catch
    try{//可能会发生错误的代码}
     catch(e){//如果发生错误则执行的代码}
      finally{//总要执行的代码}
4、switch
     switch(type){//注意type要和case中的类型一致,不能转换
         case "1":
              alert("11");
              break;
         case "2":
              alert("22");
              break;
         default:
             alert("this is other situation");
     }
5、if else
  if(){...}
 else if(){..}
  else{...} 
 
Chapter 3:
1、对象字面量:{}
2、检索:&&避免error;|| 填充默认值
3、更新
4、**引用:
         对象通过引用来传递。永远不会被拷贝
         var a={c:{d:3}};var b={};b.c={d:4};b=a;//a.c.d=3,b.c.d=3 因为b=a后b就指向了a指向的内存,而不是自己开辟的那片内存了。
         var a={c:{d:3}};var b=a;b.c={d:4};//a.c.d=4,b.c.d=4  因为b=a后再修改b的内容就是修改了b指向的那片内存的内容。
         attention:
                  var a=b={}//引用同一个空对象
                  var a={},b={}//a b引用不同对象
                  例如:var a=b={};a.c=1;console.log(b.c)//1
                            var a={},b={};a.c=1;console.log(b.c)//undefined
 
5、**原型
    委托:在检索属性的时候要是没有在对象中发现此属性名,则向上到此对象的原型中找,直到Object.prototype为止。此过程叫做委托
   创建Object.beget方法:用于创建一个使用原对象作为其原型的新对象。
       if(Object.beget!=='function'){//why
           Object.beget=function(o){
                var F=function(){};//创建空对象F
                F.prototype=o;
               return new F();
           }
       }
       var ob1={
           a:"1",
           b:"2"
       };
       var ob2=Object.beget(ob1);
       ob2.c="3";
       console.log(ob2.__proto__);
       ob1.d="4";
       console.log(ob2.d);
 
6、反射
      console.log(ob2.hasOwnProperty("a"));//false原型连中的属性返回false
       console.log(ob2.hasOwnProperty("c"));//true
7、枚举
     两种方法:
     for...in
      for(name in ob2) {
                if(!ob1.hasOwnProperty(name)) {//只枚举子类的属性
                    console.log(name + ":" + ob2[name]);
                }
            }
//方法二
var propertyList=['p1','p2','p3'];
var i;
for(i=0;i<propertyList.length;i++){
     console.log(ob[propertyList[i]]);
}
8、删除
    delete 属性
9、减少全局变量的污染
    其中一个方法是只创造一个全局变量,其他的挂在其上
     var kslite={};
     kslite.meth1=function(){};
     kslite.ob1={};
    闭包解决全局变量,待添加...
 
typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined“//没有array
instanceof 更加宽泛:
        var a=new Date(); a instanceof Object//ture 
        a instanceof Date;//true
       typeof a//只返回object
 
Chapter4:
1、四种函数调用模式
     函数模式:避免全局this
     构造函数模式:不推荐
     方法模式:绑定到object上
     Apply调用模式:将某个方法应用的另一个对象(this)上 f.call(thisObj,arg1,arg2..) f.apply(thisObj,[arg1,arg2...])
2、参数
3、递归
4、闭包
     函数在调用的时候还能访问它被创建时所处的上下文环境(改善setTimeout,hold住变量;模块模式的私有方法的访问)
5、回调:异步模式
6、单例模式
单例模式是Javascript最基本,最有用的模式之一。它提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问。单体在Javascipt中有许多用处,可以用来划分命名空间,以减少全局变量的泛滥。还可以用在分支技术中用来处理各浏览器的差异。
Javascript中单例模式的实现方式有多种,每一种都有自身的优点或缺点。
惰性加载,也就是先定义,然后在某个地方才创建对象,它常用于那些必须加载大量数据的单体。
        var LazySingleton = function() {
                var attr = 1, fn = function() {
                };
                var obj = {
                    method : function() { fn();
                    },
                    getAttr : function() {
                        return attr;
                    }
                };
                function init() {
                    return obj;
                }

                return {
                    getInstace : init
                };
            }();
原文地址:https://www.cnblogs.com/sidmeng/p/2203681.html