2010.06.05——— javascript 函数化继承

2010.06.05——— javascript 函数化继承

[color=red]迄今为止,我们多看到的继承模式的一个弱点就是 没法保护隐私,对象的所有属性都是可见的。我们没法得到私有变量和私有函数[/color]
那么 我们就需要构造一个将产生对象的函数,给它起的名字将以一个小写字母开头,因为它并不需要使用new前缀:
var XXX = function(spec,may){
var that,其他的私有实例变量;
my = my || {};
把共享的变量和函数添加到my中
that = 一个新对象;
添加给that的特权方法

return that;
}

我们还以上一个继承例子为例:
var mymmal = function(spec){
var that = {};
that.get_name = function(){
return spec.name;
};
that.says = function(){
return spec.saying || " ";
};
return that;
}

var myMammal = mammal({name: "hello"});


然后创建cat继承自他 我们的cat只需关组自身的差异,创建对象的大部分工作还是由mammal来执行的
var cat = function(spec){
spec.saying = spec.saying || "meow";
var that = mammal(spec);
that.ff = function(){
return "Hello World";
};//扩展
that.get_name = function(){
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
};
var myCat = cat({name: "xiaodu"});


函数化模式还给我们一处理父类方法的方法,我们[color=red]首先要构造一个superior方法,该方法取得一个方法名,并返回父类的这个方法名的方法:[/color]
Object.method("superior",function(name){
var that = this;
method = that[name];//获得方法名为name的对象that的方法
return function(){
return method.apply(that,arguments);//执行对象that调用method方法;
};
});


建一个cat的子类

var coolcat = function(spec){
var that = cat(spec);
super_get_name = that.superior('get_name');
that.get_name = function(n){
return ' like ' + super_get_name() + ' baby';
};
return that;
}

var myCoolCat = collcat({name: "lipeng"});
var name = myCoolCat.get_name();
//' like meow lipeng meow baby'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值