• JS原型的动态性


    由于在原型中查找成员的过程是一次搜索,所以我们对原型对象所做的任何修改都能立即从实例上反映出来(但不包括对原型对象的重写,下面会介绍到),即使是对原型的修改操作在创建实例之后。
    如下面的示例所示:

    function Wede(){}
    Wede.prototype.name="wede's name"; //"wede's name"
    //创建实例
    var person=new Wede();
    //这时候的name属性是共享原型对象上的name属性
    person.name; //"wede's name"
    //下面对原型对象成员的修改
    Wede.prototype.name="wede.zhao";
    //再次输出,发现已经是更新后的值
    person.name; //"wede.zhao"

    以上的结果和我们预料中的一样;
    但是如果是利用对象字面量方式重写原型对象,那么情况就不一样了;
    如下面的代码所示:

    function MyWede(){}
    MyWede.prototype.name="wei"; //"wei"
    var my1=new MyWede();
    my1.name; //"wei"
    //这里重写原型对象。注意:这时候改变了原型对象的构造器constructor(指向了Object,而不是之前的MyWede)
    MyWede.prototype={name:"zhao wei"}; //Object {name: "zhao wei"}
    //这里比较和上面的不同,可以看出,重写了原型对象后,之前创建的实例的[[Prototype]]内部属性(即指向构造函数的原型对象的指针)仍然指向的是最初的原型对象。
    my1.name; //"wei"
    //再次创建新的实例
    //这时候新实例的[[Prototype]]指向的是重写后的原型对象了
    var my2=new MyWede();
    //输出的结果证明了这一点:
    my2.name; //"zhao wei"

  • 相关阅读:
    习题4.7利用vector实现数据复制
    习题4.18
    4.8编写一小段程序实现两vector是否相等的比较
    关于野指针
    学习c++的50条忠告
    c++头文件
    习题4.14
    容器和迭代器
    Android上C++对象的自动回收机制分析
    Windows下载Android源码
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754603.html
Copyright © 2020-2023  润新知