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
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);
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
console.log(ob2.hasOwnProperty("c"));//true
7、枚举
两种方法:
for...in
for(name in ob2) {
if(!ob1.hasOwnProperty(name)) {//只枚举子类的属性
console.log(name + ":" + ob2[name]);
}
}
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中单例模式的实现方式有多种,每一种都有自身的优点或缺点。
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
};
}();
var attr = 1, fn = function() {
};
var obj = {
method : function() { fn();
},
getAttr : function() {
return attr;
}
};
function init() {
return obj;
}
return {
getInstace : init
};
}();