40行实现javascript继承

来源:互联网 发布:卡盟网站如何优化 编辑:程序博客网 时间:2024/05/13 18:01

来自john resig

( function (argument) {var initialzing = false;var fnTest = /\b_super\b/;//this is window, and this statement let live Class in windowthis.Class = function (){};//create a new class that inherits this classClass.extend = function ( prop ) {var _super = this.prototype;initialzing = true;var prototype = new this();initialzing = false;for ( var name in prop ) {var haveSuper = typeof prop[ name ] == "function" && typeof _super[ name ] == "function" && fnTest.test( prop[ name ] )if ( haveSuper ) {prototype[ name ] = ( function ( name , fn ) {return function () {var tmp = this._super;this._super = _super[ name ];var ret = fn.apply( this , arguments );this._super = tmp;return ret;};} ) ( name , prop[ name ] );} else {prototype[ name ] = prop[ name ];}}function Class () {if ( !initialzing && this.init )this.init.apply( this , arguments );}Class.prototype = prototype;Class.prototype.constructor = Class;Class.extend = arguments.callee;return  Class;};} )();var Person = Class.extend({  init: function(isDancing){    this.dancing = isDancing;  },  dance: function(){    return this.dancing;  }}); var Ninja = Person.extend({  init: function(){    this._super( false );  },  dance: function(){    return this._super();  },  swingSword: function(){    return true;  }}); var p = new Person(true);p.dance(); // => true var n = new Ninja();n.dance(); // => falsen.swingSword(); // => true // Should all be truep instanceof Person && p instanceof Class && n instanceof Ninja && n instanceof Person && n instanceof Class

0 0