javascript原型链初识

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初识js原型链</title>
</head>
<body>
    <script>
        function SuperType(){
            this.property="whyme";
        }
        SuperType.prototype.getSuperValue=function(){
            return this.property;
        }
        function SubType(){
            this.subproperty=false;
        }
        //继承了SuperType
        SubType.prototype=new SuperType();
        SubType.prototype.getSubValue=function(){
            return this.subproperty;
        }
        var instance=new SubType();//instance.constructor指向的是SuperType
                                    //这是因为原来的SubType.prototype中的constructor被重写了的缘故。
        alert(instance.getSuperValue()); // "whyme"
        //当以读取模式访问一个实例属性时,首先会在实例中搜索该属性。如果没有找到该属性,则会继续搜索实例的原型。
        // 在通过原型链实现继承的情况下,搜索过程就得以沿着原型链继续向上
        //上面的例子中,调用instance.getSuperValue()会经历三个搜索步骤
        //1、搜索实例  2、搜索SubType.prototype;  3、搜索SuperType.prototype,
        // 最后一步才会找到该方法。
        //在找不到属性或方法的情况下,搜索过程总是要一环一环地前行到原型链末端才会停下来。
        //所有引用类型默认都继承了Object,而这个继承也是通过原型链实现的。因此,所有函数的默认原型都是
        //Object的实例。
    </script>
</body>
</html>

1、原型对象、实例和构造函数的关系

2、上述例子完整的原型链视图

3、确定原型和实例的关系

    第一种方式:是使用instanceof操作符,只要用这个操作符来测试实例与原型链中出现过的构造函数,结果就会返回true。

alert(instance instanceof Object); //true

alert(instance instanceof SuperType); //true

alert(instance instanceof SubType); //true

由于原型链的关系,我们可以说instance是Object、SuperType或SubType中任何一个类型的实例。因此,测试这三个构造函数的结果都返回true.

  第二种方式是使用isPrototypeOf()方法。同样,只要是原型链中出现过的原型,都可以说是该原型链所派生的实例的原型。因此isPrototypeof()方法也会返回true。

alert(Object.prototype.isPrototypeOf(instance));

alert(SuperType.prototype.isPrototypeOf(instance));

alert(SubType.prototype.isPrototypeOf(instance));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript原型链是一种通过原型(prototype)来实现对象之间继承关的机制。每个JavaScript对象都有一个原型对象,用于定义该对象的属性和方法。当访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript引擎会沿着原型链向上查找,直到找到该属性或方法为止。实际上,原型链是一个链式结构,每个对象的__proto__属性指向其原型对象,形成了一个继承关系。这样,对象可以继承其原型对象的属性和方法,并且原型对象也可以有自己的原型对象,从而形成更深层次的继承关系。因此,原型链在JavaScript中起到了实现对象之间继承关系的重要作用。123 #### 引用[.reference_title] - *1* *3* [JavaScript原型链](https://blog.csdn.net/m0_72446057/article/details/129155515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [JavaScript原型链(重要)](https://blog.csdn.net/liyuchenii/article/details/125957625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值