OOP补充

模拟重载
function Person(){
var args=arguments;
if(typeof args[0]==='object'&&args[0]){ //这里还要防止args[]为null的情况,因为null也为Object
if(args[0].name){
this.name=args[0].name;
}
if(args[0].age){
this.age=args[0].age;
}
}else{
if(args[0]){
this.name=args[0];
}
if(args[1]){
this.age=args[1];
}
}
}

Person.prototype.toString=function(){
return 'name= '+this.name+',age= '+this.age;
}

var bosn=new Person('Bosn',27);
console.log(bosn.toString()); //name= Bosn,age= 27

var nunn=new Person({name:'Nunn',age:38});
console.log(nunn.toString()); //name= Nunn,age= 38




调用基类方法
function Person(name) {
this.name=name;
}
function Student(name,className){
this.className=className;
Person.call(this,name); //调用基类构造器
}
var bosn=new Student('Bosn','Network064');
console.log(bosn); //Student{className:"Network064",name:"Bosn"}, 基类与子类都被正确地初始化

Person.prototype.init=function(){};
Student.prototype.init=function(){
Person.prototype.init.apply(this,arguments); //调用基类方法
};




链式调用
function ClassManager(){}
ClassManager.prototype.addClass=function(str){
console.log('Class:'+str+'added.');
return this; //ClassManager{} 返回ClassManager的实例,所以每次调用完后,可继续调用,实现了链式调用
};

var manager=new ClassManager();
manager.addClass('classA').addClass('classB').addClass('classC');
//Class:classAadded.
//Class:classBadded.
//Class:classCadded.




^抽象类
function DetectorBase(){
throw new Error('Abstract class can not be invoked directly!');
}
DetectorBase.detect=function(){console.log('Detection starting...');};
DetectorBase.stop=function(){console.log('Detector stopped.');};
DetectorBase.init=function(){throw new Error('Error');};

function LinkDetector(){}
LinkDetector.prototype=Object.create(DetectorBase.prototype);
LinkDetector.prototype.constructor=LinkDetector;




模块化
简单实例1
var moduleA;
moduleA=function(){
var prop=1;
function func(){}
return{
func:func,
prop:prop
}
}(); //利用模块化,将变量及方法封装在对象中,使它们不泄露在全局作用域里


实例2:
var moduleA;
moduleA=new function(){
var prop=1;
function func(){}
this.func=func;
this.prop=prop;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值