码迷,mamicode.com
首页 > 编程语言 > 详细

4、JavaScript的new的模拟实现

时间:2020-03-31 20:36:14      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:log   name   指定   原理   模拟   person   img   pre   使用步骤   

  1. 先了解new的原理
    • 当代码 new Foo(...) 执行时,会发生以下事情:
      • 一个继承自 Foo.prototype 的新对象被创建。
      • 使用指定的参数调用构造函数 Foo ,并将 this 绑定到新创建的对象。new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。
      • 由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。
  2. 实现
    1 function create(con, ...args){
    2       let obj = new Object();
    3       obj.__proto__ = Object.create(con.prototype);// 链接到原型,obj 可以访问到构造函数原型中的属性
    4       var res = con.apply( obj, args)// 绑定 this 实现继承,obj 可以访问到构造函数中的属性
    5       return res instanceof Object ? res : obj;// 优先返回构造函数返回的对象
    6     }

     

  3. 验证
     1 function Person(name, age){
     2       this.name = name;
     3       this.age = age;
     4     }
     5     var p1 = new Person(‘manny‘, 28)
     6     console.log(p1)
     7     function create(con, ...args){
     8       let obj = new Object();
     9       obj.__proto__ = con.prototype;
    10       var res = con.apply( obj, args)
    11       return res instanceof Object ? res : obj;
    12     }
    13     console.log( create(Person, ‘阿特兹‘, 22))


    技术图片

4、JavaScript的new的模拟实现

标签:log   name   指定   原理   模拟   person   img   pre   使用步骤   

原文地址:https://www.cnblogs.com/yecy1992/p/12607928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!