博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 继承模式思考
阅读量:7239 次
发布时间:2019-06-29

本文共 1392 字,大约阅读时间需要 4 分钟。

虽说javascript没有直接关键字或者符号实现对继承的支持,我们同样可以通过一些蹩脚的方式实现继承。

方法一:

function Base(word) {    this.say = function () {        return word;    }    this.word = word;}function Sub(word) {    this.hello = function () {        return 'hello' + word;    }}Sub.prototype = new Base();Sub.prototype.constructor = Sub;

这个方法是我们最常见到的继承方式,但是我们会注意到基类Base构造函数是需要一个word参数的,Sub 子类继承Base时并无法将自己的word参数传给基类。

new Sub().say() 得到的值永远是undefined。

 

方法二:

function Base(word) {    this.say = function () {        return word;    }    this.word = word;}function Sub(word) {    var base = new Base(word);    base.hello = function(){ return 'hello' + word ; }   reurn base;}var sub = Sub(word);

这个方法看起来比第一个方法简单多了,也解决了传参数的问题。

但是这个方法子类是var sub = Sub(word); 不像第一个方法 var sub = new Sub(word); 

对于有new关键字强迫症的人,是不是看起来很纠结,这个写法是不是总觉得Sub不像一个类。

 

方法三:

function Base(word) {    this.say = function () {        return word;    }    this.word = word;}function Sub(word) {    $.extend(this, (new Base).constructor.apply(this, arguments)); // 调用Base 的constructor将初始化完的实例的属性和方法都拷贝到this上面。    this.hello = function () {        return word;    }}Sub.prototype = Base.prototype; // 保证 new Sub() instanceof Base == true Sub.prototype.constructor = Sub; // 将contructor 设置成自己

这个写法解决了第一个方法中无法为基类构造函数传参的问题,也使类的实例化方式看起来更自然。

  但是我查了很多资料但是都没看过 

Sub.prototype = Base.prototype; 这种写法,不知道是不是有什么隐患。

 

转载于:https://www.cnblogs.com/flowforever/archive/2012/04/16/2452595.html

你可能感兴趣的文章
C语言之基本算法11—牛顿迭代法求平方根
查看>>
Concurrency and Application Design
查看>>
vuethink 在本地没问题,在服务器报错 , php5.6与php5.5之间的大坑
查看>>
11.使用 package.json
查看>>
idea如何设置类头注释和方法注释
查看>>
白盒测试目录导航
查看>>
linux过滤旧文件中的空行和注释行剩余内容组成新文件
查看>>
[LeetCode] Preimage Size of Factorial Zeroes Function 阶乘零的原像个数函数
查看>>
GraphQL入门1
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
巧用Scrum与Kanban
查看>>
质量报告之我见
查看>>
微信域名weixin.com天价成交!是腾讯吗?
查看>>
C#实现远程机器管理
查看>>
Android生成带图片的二维码
查看>>
jQuery对表单、表格的操作及更多应用(下:其他应用)
查看>>
[.net 面向对象编程基础] (21) 委托
查看>>
阶乘相关问题
查看>>
ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
查看>>
Java引用类型变量
查看>>