1、将继承部分封装成函数
<html> <head> <script> function extend(Child,Parent){ var F = function(){}; F.prototype = Parent.prototype; Child.prototype=new F(); Child.prototype.constructor=Child; Child.uber=Parent.prototype; } function Shape() {} Shape.prototype.name = 'Shape'; Shape.prototype.toString = function () { return this.constructor.uber ? this.constructor.uber.toString() + ', ' + this.name : this.name; }; function TwoDShape() {} extend(TwoDShape,Shape); TwoDShape.prototype.name = '2D shape'; function Triangle(side, height) { this.side = side; this.height = height; } extend(Triangle,TwoDShape); Triangle.prototype.name = 'Triangle'; Triangle.prototype.getArea = function () { return this.side * this.height / 2; }; function myclick(){ var my = new Triangle(); console.log(my.toString()); } </script> </head> <body> <div style="100px;height:100px;background:red;" onclick="myclick()"></div> </body> </html>
2、属性拷贝
<html> <head> <script> function extend2(Child,Parent){ var p = Parent.prototype; var c = Child.prototype; for(var i in p){ c[i] = p[i]; } c.uber = p; } function Shape() {} Shape.prototype.name = 'Shape'; Shape.prototype.toString = function () { return this.constructor.uber ? this.constructor.uber.toString() + ', ' + this.name : this.name; }; function TwoDShape() {} extend2(TwoDShape,Shape); TwoDShape.prototype.name = '2D shape'; function Triangle(side, height) { this.side = side; this.height = height; } extend2(Triangle,TwoDShape); Triangle.prototype.name = 'Triangle'; Triangle.prototype.getArea = function () { return this.side * this.height / 2; }; function myclick(){ var my = new Triangle(); console.log(my.toString()); } </script> </head> <body> <div style="100px;height:100px;background:red;" onclick="myclick()"></div> </body> </html>
3、属性拷贝
function extend2(Child,Parent){ var p = Parent.prototype; var c = Child.prototype; for(var i in p){ c[i] = p[i]; } c.uber = p; }
4、对象之间的继承
function extendCopy(p){ var c = {}; for(var i in p) { c[i] = p[i]; } c.uber = p; return c; }
5、深复制
function deepCopy(p,c){ c = c||{}; for(var i in p){ if(p.hasOwnProperty(i)){ if(typeof p[i] === 'object') { c[i] = Array.isArray(p[i])?[]:{}; deepCopy(p[i],c[i]); } else { c[i] = p[i]; } } } return c; }
6、object()
function object(o){ var n; function F(){} F.prototype=o; n = new F(); n.uber=o; return n; }
7、原型继承与属性复制的混合应用
function objectPlus(o,stuff){ var n; function F(){} F.prototype = o; n = new F(); n.uber = o; for(var i in stuff){ n[i] = stuff[i]; } return n; }
8、多重继承
function multi(){ var n = {}, stuff, j=0, len=arguments.length; for(j=0;j<len;j++){ stuff = arguments[j]; for(var i in stuff){ if(stuff.hasOwnProperty(i)){ n[i]=stuff[i]; } } } return n; }
9、寄生式继承
10、构造器借用