javascript 原型链

对于原型链,在《javascript高级程序设计》中有讲解,但有些词汇太过于专业,对于新手来讲,有些难以理解。在讲解原型链之间,在此我们要先搞清除原型的搜索机制。在《javascript高级程序设计》中有这样一段话很重要:

虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值。如果我们在实例中添加了一个属性。该属性将会屏蔽原型中的那个属性。来看下面的例子。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script type="text/javascript">
    function Person(){}

    Person.prototype.name="Nicholas";
    Person.prototype.age=23;
    Person.prototype.job="Software Engineer";
    Person.prototype.sayName=function(){
        document.write(this.name);
    }

    var person1=new Person();
    var person2=new Person();
    person1.name="xiaohong";

    document.write(person1.name);
    document.write("<br>");
    document.write(person2.name);

</script>
</body>
</html>

output:

xiaohong
Nicholas

从上面的输出结果可以看出,先是在实例对象中查找属性”name”的值。

下面我们再来看看《javascript高级程序设计》6.3章节所讲的继承。继承开篇讲到了原型链,其实其中所讲到的原型链对于一个新手来说,一开始看起来有点模糊,不好理解,我是先从它的代码实例入手的,如果看代码还是不能理解,那就先动手敲一敲代码,不要急着一步到位的理解,先感受一下它输出的结果。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script type="text/javascript">

    function SuperType(){
        this.prototype=true;
    }

    SuperType.prototype.getSuperValue=function(){
        return this.prototype;
    }


    function SubType(){
        this.subproperty=false;
    }

    SubType.prototype=new SuperType();

    SubType.prototype.getSubValue=function(){
        return this.subproperty;
    }

    var instance=new SubType();
    document.write(instance.getSuperValue());

</script>
</body>
</html>

output:
true

通过上述代码,在结合书中所讲的概念,反反复复的揣摩一下,就能大致理解其意。

通过实现原型链,本质上扩展了前面介绍的原型搜索机制。当以读取模式访问一个实例属性时,首先会在实例中搜索改属性。如果没有找到该属性,则会继续搜素实例的原型。在通过原型链实现继承的情况下,搜索过程就得沿着原型链继续向上,就拿上面的例子来说,调用instace.getSuperValue()会经历三个搜索步骤:
1:搜索实例;
2:搜索原型SubType.prototype;
3:搜索SuperType.prototype.
最后一步才会找到该方法。再找不到属性与方法的情况下,搜索过程总是要一环一环地前行到原型链末端才会停下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值