面向对象--类式继承
来源:互联网 发布:wpf和windows窗体 编辑:程序博客网 时间:2024/06/05 12:41
类式继承:利用构造函数(类)继承的方式
类 : JS是没有类的概念的 , 把JS中的构造函数看做的类
举例
function Aaa(){ //父类 this.name = '小明';}Aaa.prototype.showName = function(){ alert( this.name );};function Bbb(){ //子类 }Bbb.prototype = new Aaa();//这个就叫做类式继承var b1=new Bbb();b1.showName();//小明alert(b1.name);//小明(也是一层层查找)
下面图很清楚的表示了上面的关系
问题一:但是上面的继承是有问题,不信的话我们做一个实验。继续在上面代码的基础上添加代码
alert( b1.constructor );
弹出
function Aaa(){ //父类 this.name = '小明';}
所以应该加上一句话,修正指向问题
Bbb.prototype = new Aaa();//这个就叫做类式继承Bbb.prototype constructor=Bbb;//修正指向问题
问题二:把上面的代码稍作修改
function Aaa(){ //父类 this.name = [1,2,3];} Aaa.prototype.showName = function(){ alert( this.name );};function Bbb(){ //子类 }Bbb.prototype = new Aaa();Bbb.prototype.constructor = Bbb; //修正指向问题var b1 = new Bbb();b1.name.push(4);var b2 = new Bbb();alert( b2.name );//[1,2,3,4]
分析,b1,b2是不同的对象,但是上面互相影响了,所以是有问题的。因为两个找到的都是new Aaa()下面的name,是一个东西,所以会互相影响。
可以这样改正,如下所示
function Aaa(){ //父类 this.name = [1,2,3];} Aaa.prototype.showName = function(){ alert( this.name );};function Bbb(){ //子类 Aaa.call(this);//①此处实现了传递属性}var F = function(){};F.prototype = Aaa.prototype;Bbb.prototype = new F();//从下面的图可以看出,此处只能传递方法,没有办法传递属性Bbb.prototype.constructor = Bbb; //修正指向问题var b1 = new Bbb();b1.name.push(4);var b2 = new Bbb();alert( b2.name );//[1,2,3,4]
阅读全文
0 0
- 面向对象--类式继承
- 面向对象编程--继承--类式继承
- 高级面向对象之 类式继承
- 什么是面向对象的类式继承?
- 面向对象的继承(类式继承)
- 面向对象----类的继承
- lua 类, 继承, 面向对象
- lua 类, 继承, 面向对象
- lua 类, 继承, 面向对象
- 面向对象,类的继承
- 面向对象(类的继承)
- 面向对象:接口继承还是类继承?
- 面向对象继承总结:拷贝继承、类式继承和原型继承
- js面向对象的继承--拷贝,类式继承,原型继承
- 面向对象:类组合还是类继承?
- 面向对象:类组合还是类继承?
- 面向对象的进阶类的继承
- (7)面向对象继承&抽象类&接口
- 双飞翼布局的原理
- ecshop修改分页或搜索的请求地址
- Linux CentOS Tomcat Web环境部署发布
- 从“穷逼VIP”论注释规范,你见过哪些奇葩的注释?
- Codeforces 893E
- 面向对象--类式继承
- 帧内预测:xPredIntraPlanar函数
- <转载>正确处理下载文件时HTTP头的编码问题(Content-Disposition)
- php实现简单的守护进程
- 你使用的框架都是假的 带你认知未来前端UI框架
- 几种USB控制器类型:OHCI,UHCI,EHCI,XHCI
- js远程图片本地化
- 玩转地图API
- 一些.Net面试题 (BS 方向)