最近,重温了一下javascript的基础知识和面向对象编程的知识。接下来,我会总结一下,在学习的过程中,我自己认为应该要注意和掌握的知识点。
1,逻辑或(||)这和其他的高级程序语言有很大的不同,(当左右两边都为false时,返回第一个不为false的值或者是最后一个值)有的时候这个运算符很有用。
2,js中的global(系统函数)
返回对一个URI字符串编码后的结果。
将一个已编码的URI字符串解码成最初始的字符串并返回。
将一个字符串按指定的进制转换成一个整数,语法格式为:parseInt(numString, [radix])。如果没有指定第二个参数,则前缀为 ‘0x’ 的字符串被视为十六进制,前缀为 ‘0’ 的字符串被视为八进制,所有其他字符串都被视为是十进制。
将一个字符串转换成对应的小数。
用于检测parseInt和parseFloat方法的返回值是否为NaN。
返回对一个字符串进行编码后的结果字符串。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中xx等于表示该字符的Unicode编码的十六进制数,字符值大于255的字符以%uxxxx格式存储。
将一个用escape方法编码的结果字符串解码成原始字符串并返回。
将其中的参数字符串作为一个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方法
1 var d=1; 2 Number.prototype.add=function(b){//给所有的Number类对象添加了add方法
3 return this+b; 4 }; 5 alert(d.add(5));
8,javascript中的类的方法和变量
特权方法:可以访问所有成员 公共方法:只能访问公共变量,公共方法
公有变量,私有变量 (给个例子一看便知)
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,继承:
对象冒充:代码示例:
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对象的任何属性和方法都会被传递给对应类的所有实例,原型链就是用这种方式来显现继承。代码示例:
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学习的重要的知识点,与大家共勉!