细谈Javascript继承随记
说到javascript继承,从后台转到前端开发的jser,一般的开发习惯是那种后台面向对象式开发
像这种后台的面向对象编程,在前端JS开发中,也有类似的概念,就是JS继承方法中的类式继承。
首先我们定义一个父类,
var Person= function (name){ this ._name=name; } Person.prototype.getName= function (){ return this ._name; } |
像在后台面向对象中的继承一样,我们再定义一个子类来继承上面的父类
var Author= function (name,books){ Person.call( this ,name); this ._books=books; } Author.prototype= new Person(); Author.prototype.constructor=Author; Author.prototype.getBooks= function (){ return this ._books; } |
上面的继承是利用javascript原型来继承父类的方法,属性是调用父类的构造,传入子类的实例对象来实现的,由于原型赋了父类对象的值,所以此时子类的原型
构造对象就变成了父类,所以此时需要重新设置子类原型的constructor,这样方便instance of 调用的时候,返回的是子类的对象。
其实上面子类继承父类的时候,做了些额外的操作,这些操作可以定义一个通用的方法来实现,见下面的代码。
var extend= function (subclas,superclass){ var F= function (){}; F.prototype=superclass.prototype; subclass.prototype= new F; subclass.prototype.constructor=subclass; // 此处修改构造为自己 subclass._superclass=superclass.prototype; if (superclass.prototype.constructor===Object.prototype.constructor){ superclass.prototype.constructor=superclass; } } |
通过上面通用extend方法,可以修改一下子类对父类继承的实现,见下面的代码。
var Author= function (name,books){ //此处调用自己的父类属性来调用,减少偶合 Author._supeclass.constructor.call( this ,name); this ._books=books; } extend(Author,Person); Author.prototype.getBooks= function (){ //此处可以通用父类属性来调用父类的方法 var name=Author._superclass.getName.call( this ); console.log(name+ this .books); } |
现在我们来写了调用的例子来看我们的成果。
var au= new Author( 'xu' , 'book1,book2' ); au.getBooks(); //打印出 xu book1,book2 |
以上只是自己在学习js面向对象中类式继承中的一些体会,尽供参考。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步