不久前在写笔记的小JOE页的博客上看到一篇名为《自创js类与继承的实现》的文章,最近自己狠劲折腾js便想起了这篇文章,于是我结合着QQ地图里的代码,简单的也写了一个JS类继承的实现,代码如下:
function extend(destination, source) { var value = null; var property = null; if (destination && source) { for (property in source) { value = source[property]; if (value !== undefined) { destination[property] = (typeof(value) == 'object' && !(value.nodeType) && !(value instanceof Array)) ? extend({}, value) : value; } } if (source.hasOwnProperty && source.hasOwnProperty('toString')) { destination.toString = source.toString; } } return destination; } Class = function() { var _C = function() { if (this.initialize) { this.initialize.apply(this, arguments); } }; var extended = {}; var parent; for (var i = 0; i < arguments.length; ++i) { if (typeof arguments[i] == 'function') { parent = arguments[i].prototype; } else { parent = arguments[i]; } extend(extended, parent); } _C.prototype = extended; _C.extend = function(args){ return Class(this,args); }; return _C; } //定义父类 var Parent=Class({ p:1, initialize:function(){ this.p=4; alert(this.p); } }); //定义子类1 var Son=Parent.extend({//继承Parent类 s:2, initialize:function(str2){ alert(this.s); } }); //定义子类2 var Son2=Son.extend({ s2:3, initialize:function(str3){ alert(this.s); } }); var p=new Parent('a'); console.log(p); var s=new Son('b'); console.log(s); var s2=new Son2('b3'); console.log(s2);
《全文完》
能说说有什么用吗?
可以实现js友好的继承。