原型对象和原型链

一、什么是原型和原型链

1)每一个对象上,都有一个属性,叫__proto__,它指向了一个对象,这个对象我们叫原型对象。
2)每一个构造器(类,函数),也是对象,这个对象上,有一个属性,叫prototype,它也指向一个对象,
和__proto__指向同一个对象,也是原型对象
3)每一个原型对象上,都是有一个属性,叫constructor,它指向此原型对象所对应的构造器
4)原型链:原型链指查找对象上某个属性的查找机制,查找一个对象上的私有属性,先在自己的私有属性中
找,找不到,就沿着__proto__去原型对象上找…
5)作用域链:在EC中,查找数据的一个机制

示例图解如下图所示:
在这里插入图片描述
toString():
1)在Object的原型对象上,有一个toString方法。
2)如果对象上,自己有toString方法,调用toString方法时,肯定是调用自己的toString方法。
==:
等于符号,判断左右两侧的操作数是否相等。 当判断,如果一侧是引用数据类型,它默认就会调用
toString。
如果自己有toStirng,那么调用自己的toString,如果没有,调用Object原型对象上的toString。

二、 原型和原型链练习题

练习一

在这里插入图片描述

练习二

在这里插入图片描述

练习三

在这里插入图片描述

练习四

在这里插入图片描述

三、a在什么情况下可以等于1等于2等于3

方法一

<script>
    // 一个对象和一个number进行比较,数据类型不一致
    // 此时,a会自动调用一个toString方法
    let a = {
        n:0,
        toString:function(){
           return ++this.n
        }
    };
    // a虽然没有明面上调用toString,实际内部会调用toString
    // === 不行 因为上来先判断类型
    console.log(a == 1);  // true
    console.log(a == 2);  // true
    console.log(a == 3);  // true
    // 每比较一次都会toString()
    if(a == 4 && a == 5 && a == 6){
        console.log("ok");
    }

</script>

在这里插入图片描述

方法二

<script>
    // toString

    let a = [1,2,3]
    console.dir(a)
    // push  a.push(4)
    // pop   a.pop()  删除最后一个元素
    // shift  a.shift()  删除第一个   返回删除的元素
    // unshift  a.unshift(x)  在最前面添加一个元素
    // 给a添加一个私有属性,叫toString  功能和shift是一样的
    a.toString = a.shift;

    if(a == 1 && a == 2 && a == 3){
        console.log("ok");
    }
</script>

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值