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

};

}();