zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    oracle 监听 添加ip
    重装系统windows
    oracle user pwd
    mybatis
    sum行列合计
    IIS8.5 运行WCF
    exp自动备份在bat中不执行
    oem 重建
    yum install oracle-validated
    MSHflexgrid控件删除选中行
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754603.html
Copyright © 2011-2022 走看看