• 构造函数-prototype


     function Start(uname, age) {
          this.uname = uname;
          this.age = age;
    
          this.sayhai = function () {
            console.log('hi');
          }
    
        }
       var zjl = new Start('zjl', '41');
        var reol = new Start('reol', '22');

    以上的构造函数中,new了zjl和reol两个对象,存在一个sayhai的方法,二者的内容一样,但由于方法为复杂数据类型,会分别开辟一个新的内存空间,白白浪费了内存,可以使用构造函数内置的属性prototype,将一些不变的方法定义在其原型对象上,达到节省内存的目的

     function Start(uname, age) {
          this.uname = uname;
          this.age = age;
    
          // this.sayhai = function () {
          //   console.log('hi');
          // }
    
        }
    
        //核心
        Start.prototype.sayhai = function () {
          console.log('hi');
        }
    
        var zjl = new Start('zjl', '41');
        var reol = new Start('reol', '22');
    
        zjl.sayhai();

    最后的输出正常,但内存被节省了

    其构造出来的对象之所以能调用prototype,是因为zjl中系统自动添加了指向prototype的原型对象的属性,__proto__

    __proto__与prototype是等价的,console.log(zjl.__proto__===Star.prototype);输出为true

    系统会在prototype和__proto__中自动添加constructor的属性,其指向原来的构造函数即Star

    输出

     console.log(zjl.__proto__.constructor);

    输出结果为:

    但是,如果这样赋值,则会自动覆盖掉系统生成的constructor

     Start.prototype = {
          sayhi: function () {
            console.log('hi');
          }
        }

    则输出 console.log(zjl.__proto__.constructor);会提示错误

    原型链: 

  • 相关阅读:
    JAVA程序员常用英语
    计算机常用英语汇总
    从一个前端角度来说页面的优化:雅虎35条(转)
    前端学习(五)
    PS常用快捷键(收藏)
    web前端开发规范文档
    前端学习(四)
    Web前端开发面试题
    linux --批量修改文件内容
    git --添加多个文件
  • 原文地址:https://www.cnblogs.com/p201821460026/p/13714379.html
Copyright © 2020-2023  润新知