全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > AI人工智能 > AI通用技术 >

构造函数(类)继承的方式与实验

时间:2017-11-24 15:26

人气:

作者:admin

标签: 类式继承 

导读:构造函数(类)继承的方式与实验-类式继承:利用构造函数(类)继承的方式 类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 举例 function Aaa () { //父类 this .name = '小明' ;}Aaa.prototype.sh...

类式继承:利用构造函数(类)继承的方式

类 : 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]

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信