JavaScript - js进阶 - 对象判定( instanceof / constructor )

instanceof 和 constructor

判断一个实例是否属于某个构造函数

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>对象判定</title>
    </head>
    <body></body>
    <script>
        // 数据判定: typeof 得到的是数据类型的描述
        // 基础数据类型 + 函数('function')

        // 复杂数据类型: 数组 + 对象(区分不同构造函数产生的实例)
        // instanceof ,语法跟typeof一样, 得到的结果是布尔结果: true是对的, false是错的
        // 数据 instanceof 构造函数     : 数据是不是构造函数的实例对象(是不是孩子)

        function Student(name, age) {
            this.name = name;
            this.age = age;
        }

        // 原型方法: 不要使用箭头函数(里面的this是指向window)
        Student.prototype.study = function () {
            console.log(this.name + "正在学习");
        };

        const s = new Student("守约", 20);
        // s.study()

        function Teacher(name, age) {
            // this.name = name
            // this.age = age

            // 借调
            Student.call(this, name, age);
        }

        Teacher.prototype.work = function () {
            console.log(this.name + "正在工作");
        };

        const t = new Teacher("小马哥", 40);
        // t.work()

        // 如何区分: s是学生,t是老师呢

        // 如果是学生: 调用study ;如果是老师: 调用work
        if (s instanceof Student) s.study();
        else s.work();

        console.log(s instanceof Student); // true
        console.log(t instanceof Student); // false

        // instanceof: 不够精确, 只要有 血缘关系 即可(原型链: 基于母系)
        console.log(s instanceof Object); // true
        console.log(s instanceof Function); // false

        // 如何精确呢? 找妈妈要爸爸: 原型对象中有一个属性: constructor永远指向构造函数
        console.log(s.constructor === Student); // true
        console.log(s.constructor === Object); // false

        // 总结
        // instanceof: 判定血缘关系(原型链即可: 侧面证明了原型链的继承)
        // 精确判定: 对象.constructor === 构造函数
    </script>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值