javascript核心技术(四十四)面向对象(五) 对象的三种继承方法

[复制链接]
查看: 1130|回复: 31
发表于 2023-1-28 15:44:09 | 显示全部楼层 | 阅读模式
在JS中有三种继承方式,分别是:
  1. 1、原型链继承
  2. 2、使用call、apply、bind实现继承,名曰冒充继承
  3. 3、Object.create(父对象)
复制代码


一、原型链继承
JS中,所有实例对象都自动继承了原型链上的所有方法,即:只要把一个方法加入到实例对象的原型链中就实现了继承。

实现原理如下:
 
<!DOCTYPE html>
<html>
<head>
        <title>面向对象(四) 原型对象应用案例-给原生对象扩展方法</title>
        <script src="./jquery.js"></script>
</head>
<body>
        <script type="text/javascript">
        // 人都会说话和走路,而有的人会打球,有的人会唱歌
        // 所以就将共有的方法定义为父类,子类只要继承父类即可
        //定义父类构造函数
        function Person(){

        }
        Person.prototype.say = function(){
                console.log('所有人都会说话');
        }
        Person.prototype.walk = function(){
                console.log('所有人都会走路');
        }

        //定义子类构造函数  歌手
        function Songer(){

        }
        //将父类构造函数的实例对象赋值给子类构造函数的原型对象,这就继承了父类
        Songer.prototype = new Person();
        //给原型对象添加方法,实例对象自动继承
        Songer.prototype.song = function(){
                console.log('唱歌');
        }
        var obj = new Songer();
        obj.say();
        obj.walk();
        obj.song();

        //定义子类构造函数  球员
        function Ball(){

        }
        Ball.prototype = new Person();
        Ball.prototype.play = function(){
                console.log('打球')
        }

        var obj2 = new Ball();
        obj2.say();
        obj2.walk();
        obj2.play();
        </script>
</body>
</html>

javascript核心技术(四十四)面向对象(五) 对象的三种继承方法

只要理解了前面我们所讲的原型链,那么原型链继承是非常简单的。


二、使用call、apply、bind实现继承,名曰冒充继承
<!DOCTYPE html>
<html>
<head>
        <title>使用call、apply、bind实现继承</title>
</head>
<body>
        <script type="text/javascript">
        //优点:不会丢失子类对象的constructor属性
        //缺点:只能继承父类构造函数中设置的成员,不能继承父类原型对象上的成员
        //父类构造函数
        function A(){
                this.age = 30;
        }
        A.prototype.say = function(){
                console.log(320);
        }
        //子类构造函数
        function B(){
                //this指向B的实例对象b
                //使用子类this去冒充父类构造函数中的this,并且直接调用父类构造函数
                //这样父类中的成员都设置到了子类对象中
                A.call(this);  // call  apply  bind 三选一
        }

        var b = new B();
        console.log(b.age);//继承了父类A中的age,输出30
        console.log(b.constructor);//实例对象b的构造函数B依然保留
        b.say();//报错,因为这样不能继承父类原型对象上的成员
        </script>
</body>
</html>

javascript核心技术(四十四)面向对象(五) 对象的三种继承方法

三、Object.create(父对象)
<!DOCTYPE html>
<html>
<head>
        <title>Object.create(父对象)实现继承</title>
</head>
<body>
        <script type="text/javascript">
        var person = {"age":30};
        //相当于var obj = new Object();或var obj = {};
        //然后将person赋值给obj的原型对象 obj.__proto__ = person;
        var obj = Object.create(person);
        console.log(obj);
        console.log(obj.age);
        </script>
</body>
</html>

javascript核心技术(四十四)面向对象(五) 对象的三种继承方法
以上代码中的核心语句为var obj = Object.create(person);它的实质是:
1、创建一个空对象,等同于var obj = new Object();或var obj = {};
2、将person赋值给obj的原型对象,等同于obj.__proto__ = person;

易博软件介绍

0

主题

12

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-2-21 05:52:21 | 显示全部楼层
感触很深!看来得好好不断学习,充实自己

0

主题

12

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-3-5 03:17:56 | 显示全部楼层
我是计算机专业的,可是基础课老学不好,现在学VB,怎么样才能把VB学好?我现在连编程序都还不会  高级程序员很厉害了  我在想什么时候自己也可以编一个小小的程序呢  不知道等到何年何月  请大家多多交流

0

主题

6

帖子

3

积分

营销入门

Rank: 2

积分
3
发表于 2023-3-15 19:00:19 | 显示全部楼层
我还没有编出什么东西,但我知道现在应该注意那些了.多谢

0

主题

18

帖子

10

积分

营销入门

Rank: 2

积分
10
发表于 2023-3-24 07:23:53 | 显示全部楼层
努力也
发表于 2023-3-31 01:38:45 | 显示全部楼层
经典,也给我们清醒了一下!

0

主题

12

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-4-4 21:46:48 | 显示全部楼层
有同感

0

主题

17

帖子

9

积分

营销入门

Rank: 2

积分
9
发表于 2023-4-10 03:48:57 | 显示全部楼层
让我深有感触,我要认真学习呀

0

主题

12

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-4-14 19:48:17 | 显示全部楼层
学无止尽,多谢楼主,让我们为中国的软件事业做点什么吧!
发表于 2023-4-19 17:53:52 | 显示全部楼层
好东西啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表