<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <script> //无论是变量名字还是,对象的属性都不能是 保留字; //继承 Object.prototype.method = function(method,fn){ return this[method] = fn; }; //继承方法1 复制继承 Function.prototype.method('new',function(){ var that = Object.create(this.prototype); var other = this.apply(that, arguments); return (typeof other === 'object' && other) || that; }); //继承方法2: 原型继承 Object.prototype.method('inherits',function(parent){ this.prototype = new parent(); //return this; }); function aa(){}; aa.prototype.fn = function(){alert(1)}; aa.prototype.fn1 = function(){alert(2)}; //var bb = function(){} //bb.prototype = aa.new(); //var bb = function(){}; //bb.inherits( aa ) //aa.fn1() //错误 var bb = (new aa) bb.fn1() // alert(1); //函数的属性和prototype是不一样的,但是用new了函数以后,返回的obj拥有了protype(继承)的方法和属性 //Model化开发 var mammal = function(spec){ var that = {}; that.get_name = function(){ return spec.name; }; that.says = function(){ return spec.saying || ''; }; return that; }; var myMammal = mammal( {name : 'herb'} ); //差异化,复用mammal var cat = function(spec){ spec.saying = spec.saying || 'meow'; var that = mammal(spec); that.purr = function(n){ var i, s = ''; for(var i=0; i<n; i++){ if(s){ s += '_'; }; s += 'r'; }; return s; }; that.get_name = function(){ return that.says() + ' ' +spec.name+ ' ' + that.says(); }; return that; }; var myCat = cat({name : 'xx'}); //部件__ ->_->话说自定义事件和常见啊 !>_<! var eventuality = function(that){ var registry = {}; that.fire = function(event){ var array, func, handler, i, type = typeof event === 'string' ? event : event.type; if( registry.hasOwnProperty(type) ){ array = registry[type]; for(var i=0; i<array.length; i++){ handler = array[i]; func = handler.func; func(); } }; }; that.on = function(type, method, parameters){ //registry[type] || ( registry[type] = {} ); var handler = { method : method, parameters : parameters }; if( registry.hasOwnProperty(type) ){ registry[type].push( handler ); }else{ registry[type] = [handler]; }; return this; }; return that; } </script> </body> </html>