js 继承
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="width: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="width: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、构造器借用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述