zoukankan      html  css  js  c++  java
  • js原型对象中属性被覆盖(1)

    /**
      *@author 程无衣
      *@description 关于在原型对象中属性被覆盖
      */
       
      function Person(){}
       
      Person.prototype={
      constructor:Person,
      age:24
      }
       
      var person1= new Person();
      person1.age=20;
      console.log(person1.age);//20
      /*输出的是实例的age属性
      说明Person原型对象的age属性被实例
      的age属性覆盖了
      */
       
      var person2= new Person();
      console.log(person2.age);//24
      //输出的是Person的原型对象中的age属性
       
      //---------------------------------------------------------------------
       
      //如果说构造函数中也有属性的话会怎么样呢?
      function Person(){
      this.age=26;
      }
       
      Person.prototype={
      constructor:Person,
      age:24
      }
       
      var person1= new Person();
      person1.age=20;
      console.log(person1.age);//20
      /*
      我们发现实例化后的属性没有受到影响,当需要age属性
      的时候,原型链首先还是在实例的属性中搜索这个age属性
      所以我们看到person2.age的值等于20
      */
       
      var person2= new Person();
      console.log(person2.age);//26
      //构造函数定义的就是实例的属性,所以这里的person2的age属性是26
       
      delete person2.age;
      //使用delete删除实例的属性
     

    console.log(person2.age);//24

    console.log(person2.name);//undefined

     

    //正如期待的那样,实例的属性被删除后,在原型对象处搜索到了age属性

     总结:在js的原型中。属性的搜索顺序是从实例属性开始,没有,再沿着原型链找到原型对象。再没有,就返回未定义。

     下次加入继承再来看看是不是按照预期的实现链式查找。

    未完待续

  • 相关阅读:
    16 类成员
    [Tips] WSL ubuntu 18.04 安装python3
    [Tips]ubuntu安装go
    [Notes] 随笔的标题格式说明
    [Tips]Ubuntu手动修改DNS
    [BUG]Ubuntu 16.04 出现“sudo unable to resolve host”
    [Tips]ubuntu 换源
    [Tips]将本地git文件夹上传云端
    [Notes] Dockerfile中COPY命令的简单性
    [BUG]Ubuntu server 16.04安装,无网卡驱动解决
  • 原文地址:https://www.cnblogs.com/ChengWuyi/p/4657379.html
Copyright © 2011-2022 走看看