Javascript原型(二)

图解原型

function Person() {//TODO}
var p = new Person();

代码执行以前要经历一个预解析的过程。function Person(){}是函数声明,p 也是声明(p 没有画出来),声明在预解析的时候完成。函数

  • 内存状况

    clipboard.png

因此,在代码开始运行时,构造函数 Person 在内存中已经存在了,因此代码运行起来第一句话是要执行var p = new Person();
程序开始执行spa

  • 执行 new 建立对象
  • 执行构造函数 Person 初始化对象(给对象添加属性)
  • 内存状况

    clipboard.png

  • 赋值给变量 p

    clipboard.png

  • 针对构造函数来讲,Person类型对象是构造函数的实例对象
  • 针对构造函数来讲,神秘对象是构造函数的原型属性
  • 针对Person类型对象来讲,神秘对象是Person类型对象的原型对象

    clipboard.png

/* 接上面的代码 */
Person.prototype.good = function() {console.log("好");}
p.good(); //好

p表示的对象默认链接到Person.prototypePerson类型对象中是不存在good方法的,可是p也能够访问到good方法,因而可知,当当前对象中不存在某属性或方法时,会去神秘对象中去查找。因此能够说,当前对象(Person类型对象)继承自神秘对象;也能够说,当前的实例对象,继承自其原型对象,这就是原型继承prototype

  • 原型继承

    clipboard.png

为何使用原型

    • 为何属性通常不放在原型上3d

      • 属性表示对象的特征,是一种对象特有的东西,对象不同,属性也应该不同。但若是放到原型上,那么就会被全部对象共享
    • 为何方法能够放在原型上code

      • 属性是对象特有的,可是这个对象的行为应该是同样的。好比人和人是不同的,可是人都会走路,吃饭,这就是行为,每一个人都是同样的,因此能够将其放在原型中复用
    • 如何修改原型
      一、 利用对象的动态特性对象

      Student.prototype.sleep = function(){}

      2 、利用直接替换blog

      /* 构造函数.prototype.xxxx = vvvv */
      /* 直接将原型进行了替换 */
      Student.prototype = {
          sleep: function(){}
          study: function(){}
      }
    • 第一种方式与第二种方式最大的不一样是,第二种方式又建立出了一个对象,将原有的原型对象进行了替换,因此如今内存中又两个对象;第一种作法是直接在原来的对象上添加属性

    分析如下题目

    function Person() {}
    
    Person.prototype.func = function () {
        console.log("11111");
    };
    
    var p1 = new Person();
    
    Person.prototype = {
        func: function () {
            console.log("2222");
        }
    };
    
    var p2 = new Person();
    p1.func();
    p2.func();
    • 预解析构造函数

      clipboard.png

    • 构造函数原型属性赋值

      clipboard.png

    • var p1 = new Person();

      clipboard.png

    • 原型属性从新赋值,首先执行等号右边的语句,也就是在内存中建立了一个对象

      clipboard.png

    • var p2 = new Person();
    • 此时构造函数的原型属性已经指向了匿名对象,因此新建立的Person类型的对象的原型对象也指向匿名对象

      clipboard.png

    • 从图能够得知,p1.func() 执行结果是1111p2.func() 执行结果是 2222
    • 总结:只要对象建立出来了,即便原型属性被从新赋值,那么也不会影响已经建立好的对象的功能
    相关文章
    相关标签/搜索