西红柿爱番茄

Feed Rss

函数化实现“伪继承机制”

01.06.2010, Javascript, by .

步骤:
1.创建一个新对象
2.有选择性的定义私有变量和方法,就是函数中通过var声明的普通变量
3.给这个新对象扩充方法
4.返回这个新对象

原理:在继承的时候,在子类中首先获得父类定义的新对象,之后在这个新对象的基础上扩充其他的方法或者重定义父类的方法.
从而达到始终都在操作同一个对象来实现“伪继承”。

[javascript]
Function.prototype.method=function(name,fn){
if(!this.prototype[name]){
this.prototype[name]=fn;
}
return this;
}
var mammal = function(spec){
var that = {}; //创建一个新对象
//给新对象扩充方法
that.get_name = function(){
return spec.name;
};
that.says = function(){
return spec.saying || "";
};
//返回这个新对象
return that;
}

var cat=function(spec){
spec.saying=spec.saying || meow ;

//调用mammal方法,获得它生成的对象
var that=mammal(spec);

//在mammal方法返回的对象基础上扩展方法
that.purr=function(n){
var i,s="";
for(i=0;i<n;i++){
if(s){
s+="-";
}
s+="r";
}
return s;
};
//重定义get_name方法
that.get_name=function(){
return that.says()+" "+spec.name +" "+that.says();
}
//返回扩展后的对象
return that;
}

//Object扩展方法superior,通过参数名称访问父类方法
Object.method( superior ,function(name){
var that=this,method=that[name];
return function(){
return method.apply(that,arguments);
}
});

var coolcat=function(spec){
var that=cat(spec);
var super_get_name=that.superior( get_name ); //获得父类的get_name方法的引用
//重定义get_name方法
that.get_name=function(n){
return Like +super_get_name()+" baby,"+n;
};
//返回扩展后的对象
return that;
}

var myCoolCat=coolcat({name:"Bix"});
alert(myCoolCat.get_name("supersha"));
[/javascript]

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>