摘要:以这种方式调用构造函数实际上会经历以下个步骤创建一个新对象将构造函数的作用域赋给新对象因此就指向了这个新对象执行构造函数中的代码为这个新对象添加属性返回新对象。
JS 高程中的解释
要创建 Person 的新实例,必须使用 new 操作符。以这种方式调用构造函数实际上会经历以下 4 个步骤:
(1) 创建一个新对象;
(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象);
(3) 执行构造函数中的代码(为这个新对象添加属性);
(4) 返回新对象。
看了这个原理,想试着写下实现过程,虽然不够严谨。至少核心思想是体现出来了。
模拟实现:
// 先写一个构造函数 function Person (name){ this.name = name } // myNew 方法实现 function myNew(fn){ let obj = Object.create(fn.prototype) // 创建一个对象,并将构造函数的原型对象赋给新创建的对象,即生成的实例与构造函数的原型对象关联 let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1)) // 函数执行(为该对象赋属性) return obj // 返回该对象 } console.log(p1 instanceof Person) // true console.log(myNew(Person, "Tom")) // Person{ "name":"Tom" }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/104052.html
摘要:一表达式匿名内部类最大的问题在于其冗余的语法,比如前面的中五行代码仅有一行是在执行任务。总结基于词法作用域的理念,表达式不可以掩盖任何其所在上下文的局部变量。 转载请注明出处:https://zhuanlan.zhihu.com/p/20540175 在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口): public interface...
摘要:面向对象设计里的设计模式之代理模式,相信很多朋友已经很熟悉了。代表当前执行方法的实例,即方法调用者。代表具体的方法名称。现在我们再次调用,传入构造器返回的代理对象打印输出,代理逻辑生效了和的一样优雅地实现了代理设计模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向对象设计里的设计模式之Proxy(代理...
摘要:在编程文化中,我们有一个名为面向对象编程的东西,这是一组技术,使用对象和相关概念作为程序组织的中心原则。这是构造器函数的作用。因此,上面的类声明等同于上一节中的构造器定义。 来源:ApacheCN『JavaScript 编程精解 中文第三版』翻译项目原文:The Secret Life of Objects 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考...
阅读 1245·2023-04-25 18:57
阅读 2127·2023-04-25 16:28
阅读 3926·2021-11-24 09:39
阅读 3631·2021-11-16 11:45
阅读 1816·2021-10-13 09:40
阅读 1260·2019-08-30 15:52
阅读 1715·2019-08-30 10:57
阅读 657·2019-08-29 16:55