js面向对象

大部分时间我们都是在面向过程的,都只不过是使用对象的人,现在学习面向对象是要成为写(改造)对象的人。
 
一、何为对象
  • 对象:属性和方法的集合
  •  属性:其实就是变量(只不过有个归属)
  •  方法:其实就是函数(只不过有个归属)
  •  类:一组同样属性和方法的对象的集合
 
二、
  • 声明对象:var obj=new Object();
  • 直接量,声明了一个空对象:var obj={};
  • 直接量,json:
  • var obj={
    a:"dfsdf",
    b:function (){
        alert(this.a);
    }
    };

     

三、new
工厂模式:
1、一个人的类:
  • function Person(name,sex){
    //工厂模式
    
    //类就是用来创建对象
    var obj={};
    
    this.name=name;
    this.sex=sex;
    this.showName=function (){
    alert(this.name);
    }
    this.showSex=function (){
    alert(this.sex);
    }
    return obj;
    }

     

2、不用new来创建一个新的人的对象
  • var Ben=Person("Ben","false");
  • 类中无变化
 
构造函数模式:
1、一个人的类:
function Person(name,sex){
//构造函数模式

this.name=name;
this.sex=sex;
this.showName=function (){
alert(this.name);
}
this.showSex=function (){
alert(this.sex);
}
}

2、用new创建一个新的人的对象

var Ben=new Person("Ben","false");
四、原型prototype
  • 格式:类型.prototype.属性(方法)=参数(函数function);
    • 类型:可以为 Array\Object\String 等
    • 属性:可自定义
  • 作用:给所有对应类型的变量或属性绑定一个属性(方法),这个方法必须要调用
 
五、instanceof 判断
  • 作用:用来指出对象是否是特定类的一个实例;是则返回false
  • 格式:object instanceof class
    • object 为 arr1、str2、Array ...... 等
    • class 为 Array、Object、String ...... 等
 
六、原型链
例子:
var arr=[1,2,3];
alert(arr.index);
  • undefined也是值
  •  1.首先会看arr这个变量上面有没有index这个属性
  •  2.Array这个类(构造函数)有没有index这个属性
  •  3.Object这个类有没有index这个属性
  •  4.返回undefined并赋值给arr
 
七、继承 apply && call
1、创建一个人类:
function Person(name,sex){   
  this.name=name;
  this.sex=sex;
 
  this.showName=function (){
   alert(this.name);
  }
 }
 
2、定义一个职工类(看call继承和apply继承的区别):
 
3、区别:
  • 使用apply时,参数列表位置必须对应:
    • function Person(name,age){ }
    • Student(name,age,sex){ }
    • 在apply传递
      • Person.apply(this,arguments);
  • 使用call时,参数列表位置可以不对应
    • function Person(name,age){ }
    • Student(age,name,sex){ }
    • 不过在call传递时得位置对应
      • Person.call(this,name,age);
 
注意:call、apply改变this指向
  • call:按顺序的参数
  • apply:第二个参数时一个数组arguments
posted @ 2015-06-09 11:50  心胸广阔  阅读(134)  评论(0编辑  收藏  举报