• new操作符实现原理


    new操作符实现原理:  
    function news(func) { var target = {};//生成新对象 target.__proto__ = func.prototype;//实例的__proto__指向原型,构造函数的prototype也指向原型(链接到原型) var res = func.call(target);//把函数的this绑定在了新生成的对象中 if (typeof (res) == "object" || typeof (res) == "function") { return res;//如果传入的函数(构造函数)有自己的返回值,则返回该值 } return target;//如果如果传入的函数(构造函数)没有自己的返回值,则返回新对象 }

     如果暂时看不明白,请往下看:

    1.明白new的原理首先我们需要明白原型,构造函数,实例的关系

    • 原型(prototype):一个简单的对象,用于实现对象的属性继承。可以简单理解成对象的父亲。在火狐和谷歌中,每个js对象中都包含一个__proto__(非标准)的属性指向它爹(该对象原型),可obj.__proto__进行访问。
    • 构造函数:可以  通过new来新建一个对象  的函数。
    • 实例:通过 构造函数new 创建出来的 对象,就是实例。实例通过__proto__指向原型,通过constructor指向构造函数。

    写明是栗子,以函数Father为例,函数Father就是一个构造函数,我们可以通过它构建一个实例

     function Father() {
           let colors = [1,2,3];
           return colors;
     }
    const instance = new Father();

     此时,instance为实例,构造函数为Father,构造函数拥有一个prototype的属性指向原型。

    因此原型为:

    const prototype = Father.prototype;

    因此看得出三者的关系:

    实例.__proto__===原型
    原型.constructor === 构造函数
    构造函数.prototype === 原型
    实例.constructor === 构造函数
     

    例子:

      function instanceFun(){
               this.colors=['res','pink','black']
      }
           const instance = new Father();
           console.log(instanceFun.prototype.constructor,'构造函数');
           console.log(instance.__proto__,'实例访问原型');
           console.log(instanceFun.prototype,'构造函数访问原型');
           console.log(instance.constructor,'实例的构造函数');

     2.new运算符的执行过程

    • 新生成一个对象
    • 链接到原型
    • 绑定this
    • 返回新对象(如果构造函数有自己 retrun 时,则返回该值)

     

  • 相关阅读:
    mysql auto_increment自增初始值与步长
    mysql配置的一些问题以及命令的说明
    数据分析-数据透视表
    线程进程
    tkinter学习-- 九、三种事件绑定方式总结
    tkinter学习-- 八、事件event
    tkinter学习-- 六、Radiobutton(单选按钮)与checkbutton(复选按钮)
    tkinter学习-- 四、控件Text
    在spring Boot中使用swagger-bootstrap-ui
    js 数据比较
  • 原文地址:https://www.cnblogs.com/lppswkf/p/10724715.html
Copyright © 2020-2023  润新知