最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JS重学系列之聊聊new操作符

来源:懂视网 责编:小采 时间:2020-11-27 22:00:25
文档

JS重学系列之聊聊new操作符

JS重学系列之聊聊new操作符:new操作符的基本过程: 1.创建一个新的空对象。 2.将构造函数的作用域赋给它(即this指向它)。 3.新对象增加构造函数的基本方法和属性。 4.返回新对象 上面的过程大家应该都熟悉,本文是重学 JS 系列的第一篇文章,写这个系列的初衷也是为了夯实自己的 J
推荐度:
导读JS重学系列之聊聊new操作符:new操作符的基本过程: 1.创建一个新的空对象。 2.将构造函数的作用域赋给它(即this指向它)。 3.新对象增加构造函数的基本方法和属性。 4.返回新对象 上面的过程大家应该都熟悉,本文是重学 JS 系列的第一篇文章,写这个系列的初衷也是为了夯实自己的 J

通过以上几个例子,相信大家也大致了解了 new 操作符的作用了,接下来我们就来尝试自己实现 new 操作符。

自己实现 new 操作符

首先我们再来回顾下 new 操作符的几个作用

  • new 操作符会返回一个对象,所以我们需要在内部创建一个对象
  • 这个对象,也就是构造函数中的 this,可以访问到挂载在 this 上的任意属性
  • 这个对象可以访问到构造函数原型上的属性,所以需要将对象与构造函数链接起来
  • 返回原始值需要忽略,返回对象需要正常处理
  • 回顾了这些作用,我们就可以着手来实现功能了

    function create(Con, ...args) {
     let obj = {}
     Object.setPrototypeOf(obj, Con.prototype)
     let result = Con.apply(obj, args)
     return result instanceof Object ? result : obj
    }

    这就是一个完整的实现代码,我们通过以下几个步骤实现了它:

  • 首先函数接受不定量的参数,第一个参数为构造函数,接下来的参数被构造函数使用
  • 然后内部创建一个空对象 obj
  • 因为 obj 对象需要访问到构造函数原型链上的属性,所以我们通过 setPrototypeOf 将两者联系起来。这段代码等同于 obj.__proto__ = Con.prototype
  • 将 obj 绑定到构造函数上,并且传入剩余的参数
  • 判断构造函数返回值是否为对象,如果为对象就使用构造函数返回的值,否则使用 obj,这样就实现了忽略构造函数返回的原始值
  • 接下来我们来使用下该函数,看看行为是否和 new 操作符一致

    function Test(name, age) {
     this.name = name
     this.age = age
    }
    Test.prototype.sayName = function () {
     console.log(this.name)
    }
    const a = create(Test, 'yck', 26)
    console.log(a.name) // 'yck'
    console.log(a.age) // 26
    a.sayName() // 'yck'

    虽然实现代码只有寥寥几行,但是结果很完美

    最后

    我们通过这篇文章重学了 new 操作符,

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    JS重学系列之聊聊new操作符

    JS重学系列之聊聊new操作符:new操作符的基本过程: 1.创建一个新的空对象。 2.将构造函数的作用域赋给它(即this指向它)。 3.新对象增加构造函数的基本方法和属性。 4.返回新对象 上面的过程大家应该都熟悉,本文是重学 JS 系列的第一篇文章,写这个系列的初衷也是为了夯实自己的 J
    推荐度:
    标签: new 系列 new操作符
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top