JS模式:Mixin混合模式,=_=!就是常见的Object.create()或者_extend()
<!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> var Person = function(firstName,lastName){ this.firstName = firstName; this.lastName = lastName; this.genter = 'male'; }; var clark = new Person('Clark','kent'); console.log(clark);// ->_-> Person {firstName: "Clark", lastName: "kent", genter: "male"} //通过试用call方法,让superhero继承person函数内部的所有属性,理解为执行一遍,并把,执行的语句赋给当前的this; var Superhero = function(firstName,lastName,powers){ person.call(this,firstName,lastName); this.powers = powers; }; /*__________________________________________________________________________________________________________*/ var Car = function(setting){ this.model = setting.model || 'no model provided'; this.color = setting.color || 'no color provided'; }; var Mixin = function(){}; Mixin.prototype = { driveForward : function(){ console.log( "drive forward" ); }, driveBackward : function(){ console.log("drive backward"); }, driveSideways : function(){ console.log("drive sideways") } }; function augment(receivingClass,givingClass){ if(arguments[2]){ for(var i =0; i<arguments.length; i++){ receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]]; }; }else{ for(var method in givingClass){ if(!receivingClass.hasOwnProperty[methodName]){ receivingClass.prototype[methodName] = givingClass.prototype[methodName] }; }; }; }; augment(Car,Mixin,"driveForward","driviBackward"); var myCar = new Car({ model : 'ford++++', color : '#f00' }) myCar.driveForward() // drive forward </script> </body> </html>
天道酬勤