javascript 之 面向对象【继承】
继承:函数没有签名,无法实现接口继承。ECMAScript只支持实现继承
1/原型链
回顾:构造函数、原型和实例的关系?
回:每个构造函数都有一个原型对象。原型对象都包含一个指向构造函数的指针。实例都包含一个指向原型对象的内部指针。
案例分享: function FatherType() { this.F_PanDuan = true; } FatherType.prototype.getFatherValue= function () { return this.F_PanDuan; } function ChildType() { this.C_PanDuan = false; } ChildType.prototype = new FatherType(); ChildType.prototype.getChildValue = function () { return this.C_PanDuan; } var instance = new ChildType(); alert(instance.getFatherValue()); //true
案例分析:FType 和CType分别有一个属性和方法,其中CType继承了FType
理解难点在于:每个构造函数都有一个原型对象。原型对象都包含一个指向构造函数的指针。实例都包含一个指向原型对象的内部指针。
扩展分析:原型搜索机制。当读取模式访问一个实例属性时,先在实例中搜索该属性,若没有该属性则搜索实例的原型。
那么这里会有三个步骤:1/搜索实例 2/搜索ChildType.prototype 3/搜索FatherType.prototype
2/确定原型与实例的关系
(1)instanceof操作符
alert(instance instanceof Object) //true (其中Object 还可以是FatherType,ChildType 返回都为true)
(2)isPrototypeOf()
alert(Object.prototype.isPrototypeOf(instance)) //true (其中Object 还可以是FatherType,ChildType 返回都为true)
3/谨慎地定义方法
接着上面地例子:加一句 //重写父类型中的方法 ChildType.prototype=getFatherValue=function(){ return false}; 结果: alert( instance.getFatherValue()) //false
还需要注意的是:ChildType.prototype指针已经指向了FatherType,那么此时ChildType.prototype 就不能指向其他方法或对象,否则就不是指向FachterType构造函数
4/原型链的问题:
(1)包含引用类型值得原型属性都会被所有实例共享
案例: function F_Type(){ this.colors={'red','green','blue'} } function C_Type(){} C_Type.prototype=new F_Type(); var instancel=new C_Type(); instancel.colors.push('black') alert(instancel.colors) //'red','green','blue','black' var instancel2=new C_Type() instancel2.colors.push('black') alert(instancel.colors) //'red','green','blue','black'
(2)在创建子类型得实例时,不能向父类型的构造函数中传递参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2016-12-21 字符串处理总结之二(C#StringBuilder类)
2016-12-21 命名参数和可选参数
2016-12-21 注意技巧小结
2016-12-21 小数点转百分比
2016-12-21 多线程