java面向对象语言具有封装,继承,多态特性,而js也是一门面向对象的语言,可以模仿这个形式,然后使用面向对象思维进行编程。封装和继承的本质就是控制权限的使用。
封装对应着private权限,继承对应着protec和publict权限。
在js中类的定义是函数:
(1) function people(){};
(2)var people=function(){};
(3)var people=new Function(){}
对js权限的理解:带this指针是public,通过prototype原型定义的是protect,没有带的是private。
var people=function(){
var name="";//private
//对name属性进行封装
this.setName=function(_name){
name=_name;
}
this.getName=function(){
return name;
}
}
people.prototype.say=function(){
alert("我的名字是:" +this.getName());
}
类的实例化:
var p=new people();
类的继承:
function man(){
people.call(this);//继承public
this.sex="男";
}
man.prototype=Object.create(people.prototype);//继承protect
man.prototype.sayMysex=function(){
alert(this.sex);
}
注意必须先继承再添加方法,否则添加的方法无效。
这种方法实现继承,只能实现单继承。如果继承多个以最后一个为准。
实现多个类可以使用反射的机制。给Function(类)增加一个继承机制,然后进行调用。
Function.prototype.hire=function(agr){
for(var i=0;i<arguments.length;i++){
for(var o in arguments[i].prototype){
this.prototype[o]=arguments[i].prototype[o];
}
}
};
调用 var child=function(){
people.call(this);
main.call(this);
}
child.hire(people,man);
当然你可以通过反射进行类似于接口的实现,不过不建议这样做。
多态的话就是向数组里添加一组具有相同父类对象,然后遍历数组,对每个对象调用该父类的同一个方法。