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