js学习小结

最近,重温了一下javascript的基础知识和面向对象编程的知识。接下来,我会总结一下,在学习的过程中,我自己认为应该要注意和掌握的知识点。

1,逻辑或(||)这和其他的高级程序语言有很大的不同,(当左右两边都为false时,返回第一个不为false的值或者是最后一个值)有的时候这个运算符很有用。

2,js中的global(系统函数)

encodeURI及encodeURIComponent方法

  返回对一个URI字符串编码后的结果。

ldecodeURI及decodeURIComponent()方法

  将一个已编码的URI字符串解码成最初始的字符串并返回。

lparseInt方法

  将一个字符串按指定的进制转换成一个整数,语法格式为:parseInt(numString, [radix])。如果没有指定第二个参数,则前缀为 ‘0x’ 的字符串被视为十六进制,前缀为 ‘0’ 的字符串被视为八进制,所有其他字符串都被视为是十进制。

lparseFloat方法

  将一个字符串转换成对应的小数。

lisNaN方法

  用于检测parseInt和parseFloat方法的返回值是否为NaN。

lescape方法

  返回对一个字符串进行编码后的结果字符串。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中xx等于表示该字符的Unicode编码的十六进制数,字符值大于255的字符以%uxxxx格式存储。

lunescape 方法

  将一个用escape方法编码的结果字符串解码成原始字符串并返回。

leval 方法(在使用ajax方法返回json时有用)

  将其中的参数字符串作为一个JavaScript表达式执行。

3,事件编程(不同的浏览器事件响应不一样,所以建议使用一些流行框架(jquery,ext))

在ie浏览器中 事件用event firfox 用第一个参数比如e就是事件响应对象,所以要用e=e||event;

ie绑定函数attachEvent,detachEvent      firefox:addEventListener,removeEventListener

4,js函数不支持重载,使用可变参数或者arguments数组来模拟重载

5,js闭包:在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁

 

 1    function a() {   
 2     var i = 0;   
 3     function b() {   
 4      alert(++i);   
 5    }   
 6     return b;   
 7     }   
 8     var c = a();   
 9     c();  
10 
11 /*闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。*/

 

6,函数的作用域:在函数或方法中可以使用this来引用函数所在的当前对象;当没有明确指定函数的当前对象时,作用域为window;可以使用call及apply来动态改变函数执行的作用域

1 var b1={v:"this is b1"};
2 var b2={v:"this is b2"};
3 function b(d){
4     alert(this.v);
5 }
6 b();//输出:  
7 window.b();//输出:
8 b.call(b1);//输出:
9 b.apply(b2);//输出:

7,类的扩展和修改:使用prototype属性,超级延迟绑定(个人感觉这个方法非常强大)比如:实现给Number类添加add方法

View Code
1 var d=1;
2 Number.prototype.add=function(b){//给所有的Number类对象添加了add方法
3     return this+b;
4 };
5  alert(d.add(5));

 8,javascript中的类的方法和变量

特权方法:可以访问所有成员   公共方法:只能访问公共变量,公共方法

公有变量,私有变量 (给个例子一看便知)

 

View Code
 1 //涵盖了javascript公有成员定义、私有成员定义、特权方法定义的简单示例!
 2       1. <script>    
 3        2.     //定义一个javascript类  
 4        3.     function JsClass(privateParam/*  */,publicParam){//构造函数  
 5        4.         var priMember = privateParam;   //私有变量  
 6        5.         this.pubMember = publicParam;   //公共变量  
 7        6.         //定义私有方法  
 8        7.         function priMethod(){  
 9        8.             return "priMethod()";  
10        9.         }  
11       10.         //定义特权方法  
12       11.         //特权方法可以访问所有成员  
13       12.         this.privilegedMethod = function(){  
14       13.             var str = "这是特权方法,我调用了\n";  
15       14.             str += "        私有变量:" + priMember +"\n";  
16       15.             str += "        私有方法:" + priMethod() +"\n";  
17       16.             str += "        公共变量:" + this.pubMember +"\n";  
18       17.             str += "        公共方法:" + this.pubMethod();  
19       18.               
20       19.             return str;  
21       20.         }         
22       21.     }  
23       22.     //添加公共方法  
24       23.     //不能调用私有变量和方法  
25       24.     JsClass.prototype.pubMethod = function(){  
26       25.         return "pubMethod()";  
27       26.     }  
28       27.   
29       28.     //使用 JsClass的实例  
30       29.     JsObject = new JsClass("priMember","pubMember");  
31       30.       
32       31.     //alert(JsObject.pubMember);//弹出pubMember信息  
33       32.     //alert(JsObject.priMember);//弹出undefined信息  
34       33.     //alert(JsObject.pubMethod());//弹出pubMethod信息  
35       34.     //alert(JsObject.priMethod());//弹出"对象不支持此属性或方法"的错误  
36       35.     alert(JsObject.privilegedMethod());  
37   36. </script>  

 

9,继承:

对象冒充:代码示例:

View Code
 1 function classA(name) {
 2              this.name=name;
 3              this.showName=function(){alert(this.name);}
 4     }
 5     function classB(name) {
 6              this.newMethod = classA;
 7              this.newMethod(name);
 8     }
 9        obj = new classA("hero");
10        objB = new classB("dby");
11        obj.showName(); //   print hero
12        objB.showName(); // print dby  说明classB 继承了classA的方法.
13        对象冒充可以实现多重继承  例如
14        function classz(){
15        this.newMethod = classX;
16        this.newMethod();
17        delete this.newMethod;    
18       }
19     //  但是如果classX和classY有相同的属性或者方法,classY具有高优先级.

call和apply方法:call方法使与经典的对象冒充法就相近的方法,它的第一个参数用作this的对象,其他参数都直接传递给函数自身;apply()方法有2个参数,一个用作this对象,一个使传递给函数的参数数组;
原型链:prototype对象的任何属性和方法都会被传递给对应类的所有实例,原型链就是用这种方式来显现继承。代码示例:

View Code
 1 function classA(name){
 2     this.name=name;
 3     this.showName=function(){
 4         alert(this.name);
 5     };
 6 }
 7 function classB(name){//js继承机制
 8     /*this.newMethod=classA;
 9     this.newMethod(name);*/
10     //classA.call(this,name);
11     //classA.apply(this,[name]);
12 }
13 
14 
15 function classA (){}
16     classA.prototype.name="hero";
17     classA.prototype.showName=function(){alert(this.name)}
18     function classB(){}
19     classB.prototype=new classA();
20     objb = new classB()
21     objb.showName();//print hero  
22 /*说明b继承了a的方法
23     这里需要注意 调用classA的构造函数时,没有给它传递参数,这是原型链的标准做法,确保函数的构造函数没有任何参数.
24     并且 子类的所有属性和方法,必须出现在prototype属性被赋值后,应为在它之前赋的值会被删除.因为对象的prototype属性被替换成了新对象,添加了新方法的原始对象将被销毁.*/

以上就是我总结的一些js学习的重要的知识点,与大家共勉!

 

 

posted on 2012-11-28 10:50  woyuchengxian  阅读(397)  评论(0编辑  收藏  举报

导航