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学习的重要的知识点,与大家共勉!

 

 

你可能感兴趣的:(js)