js回忆总结

  • 闭包
  1. 在函数内部声明一个函数并返回 
  2. 原函数的内部变量在外部无法访问,但对内部函数是可见的,返回一个内部函数,则对外提供了一个操作函数内部变量的接口
  3. 一直在内存中  
 1 var fn=function(){
 2     var i=0; 
 3     var add=function(){i++;alert(i)};
 4     return add;
 5 }
 6 
 7 res=fn();
 8 
 9 res();         //1
10 res();         //2

 

  • 封装

    为了实现数据的封装,必须使用作用域,而javascript中唯一具有作用域的是函数,于是数据封闭就通过函数来完成

  1. 私有属性:在构造函数中用 var 定义的, 函数外部无法访问函数内部数据,从而模拟私有
  2. 特权属性和方法: 用this创建, 和对象实例绑定, 可以访问私有属性和方法,(访问私有属性直接使用 属性名; 而访问特权属性,由于和实例绑定,需用 this.属性名); 只有要访问私有属性的函数才应该设计为特权方法;
  3. 公有属性和方法: 在prototype上的属性和方法,子类会继承所有公有成员,并且使用同一份;可以访问特权成员,但无法访问私有成员
  4. 公有静态成员: 在类上定义的类属性,直接用 类命.成员名 访问
 1 Obj=function(name,age){
 2     //私有属性
 3     var name=name;
 4 
 5     //特权属性 方法
 6     this.age=age ;
 7     this.getName=function(){return name}
 8 }
 9 
10 //公有属性 方法
11 Obj.prototype.id=1;
12 Obj.prototype.getAge=function(){
13     return this.age;      
14 }
15 
16 //静态
17 Obj.fn=function(){
18     ....
19 }
  • 继承
  1. 对象冒充
 1 function ClassA(name){
 2     this.name=name;
 3 }
 4 ClassA.prototype.getName=function(){
 5     return this.name;
 6 }
 7 
 8 function ClassB(name, age){
 9 //    this.newMethod=ClassA;
10 //    this.newMethod(name);
11 //    delete this.newMethod;
12     ClassA.call(this,name);
13     
14     this.age=age;
15 }
16 ClassB.prototype=new ClassA();
17 ClassB.prototype.constructor=ClassB;
18 ClassB.prototype.getAge=function(){
19     return this.age;
20 }
  1. 原型链
  2. call()和apply()方法

 

posted on 2013-08-07 00:07  Iori_z  阅读(138)  评论(0)    收藏  举报

导航