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"

  • 相关阅读:
    畅通工程续 (dijkstra)
    最短路径问题 HDU 3790
    【基础算法-模拟-例题-玩具谜题】-C++
    【基础算法-模拟-例题-金币】-C++
    【动态规划例题-数塔问题】-C++
    【基本数据结构之'图'】
    【最小生成树之Kruskal例题-建设电力系统】-C++
    【最短路算法例题-升降梯上】-C++
    【基本数据结构之栈】
    【栈-例题】网页跳转-C++
  • 原文地址:https://www.cnblogs.com/zhaow/p/9754603.html
Copyright © 2011-2022 走看看