JavaScript ES5 模拟实现“继承”

本文尝试用JavaScript(ES 5)模拟实现,面向对象语言中的“继承”机制。

继承/覆写父类的方法,追加子类自身特有的方法,一个都不少。

Input模拟“父类”

先用js中的一等公民function仿写一个Input类。

function Input(maxlen) {
	var value = "";
	this.getMaxLen = function() {
		return maxlen;
	}
	this.value = function(v) {
		if(v == undefined) {
			return value;
		} else {
			value = v;
		}
	}
	return this;
}

这个Input类能够指定最大输入长度,能够通过value()方法存/取内部的值。

NumberInput模拟“子类”

function NumberInput(min, max, maxlen) {
	var base = Input(maxlen);
	// “继承”了Input中的getMaxLen()方法
    
    // 追加子类自身的方法getMin()
	base.getMin = function() {
		return min;
	}
    // 追加子类自身的方法getMax()
	base.getMax = function() {
		return max;
	}
    
	// 要覆写value()方法之前,留存父类的value()方法
    // 便于需要的时候调用。
	var _supperValue = base.value;
	base.value = function(v) {
		if(typeof v === 'number') {
			_supperValue(v);
		} else {
			var v = _supperValue()||'0';
			return parseInt(v);
		}
	}
	return base;
}

NumberInput“子类”,不光实现了自己特有的getMin()/getMax()方法,还继承了父类的getMaxLen()方法,并且覆写了父类的value()方法。这不就是实现了面向对象语言中的继承么!

验证代码

var x = NumberInput(1, 100, 10);
x.getMaxLen();//10
x.getMin();//1
x.getMax();//100
x.value();//0
x.value(88);
x.value();//88
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值