资讯专栏INFORMATION COLUMN

五行代码实现 JavaScript 中的 new 关键字

WelliJhon / 2249人阅读

摘要:以这种方式调用构造函数实际上会经历以下个步骤创建一个新对象将构造函数的作用域赋给新对象因此就指向了这个新对象执行构造函数中的代码为这个新对象添加属性返回新对象。

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

相关文章

  • 初识python

    很早就听说python的赫赫大名了,这学期学校也开了这门课,正好可以感受一下这门语言的魅力,对比C/C++/JAVA,它到底有什么独特的地方呢? Life is short, you need Python --Bruce Eckel人生苦短,我用python 一. 初印象:short 曾经有这样一个段子,说联合国同样一份档案,用五大官方语言写的不同版本中,最薄的那份一定是汉语的。 这个段子...

    gitmilk 评论0 收藏0
  • Java8新特性第1章(Lambda表达式)

    摘要:一表达式匿名内部类最大的问题在于其冗余的语法,比如前面的中五行代码仅有一行是在执行任务。总结基于词法作用域的理念,表达式不可以掩盖任何其所在上下文的局部变量。 转载请注明出处:https://zhuanlan.zhihu.com/p/20540175 在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口): public interface...

    ningwang 评论0 收藏0
  • JS修仙之一界本源

    摘要:时间一晃就是数月,齐云早已把界基本情况了解了,不过至于三座大山里隐藏的谜团却迟迟没有头绪。它是界本源之一。事实上,根本没有构造函数,或者人人都是构造函数。所以,明白这个界的一界本源,才能在这里畅游天地之间。 自计算机宇宙诞生以来,有很多大神通者在这里开天辟地,开创了很多界,有C、C++、Java等世界,它们彼此相连,其中有一处叫做JavaScript的世界,自被开辟以来吸引了很多修行者...

    I_Am 评论0 收藏0
  • 100行代码让您学会JavaScript原生的Proxy设计模式

    摘要:面向对象设计里的设计模式之代理模式,相信很多朋友已经很熟悉了。代表当前执行方法的实例,即方法调用者。代表具体的方法名称。现在我们再次调用,传入构造器返回的代理对象打印输出,代理逻辑生效了和的一样优雅地实现了代理设计模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向对象设计里的设计模式之Proxy(代理...

    txgcwm 评论0 收藏0
  • JavaScript 编程精解 中文第三版 六、对象的秘密

    摘要:在编程文化中,我们有一个名为面向对象编程的东西,这是一组技术,使用对象和相关概念作为程序组织的中心原则。这是构造器函数的作用。因此,上面的类声明等同于上一节中的构造器定义。 来源:ApacheCN『JavaScript 编程精解 中文第三版』翻译项目原文:The Secret Life of Objects 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考...

    ddongjian0000 评论0 收藏0

发表评论

0条评论

WelliJhon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<