日志 new 操作符

调用new的过程发生:
1.新生成一个对象
2.链接到原型
3.绑定this
4.返回新对象(如果构造函数有自己 retrun 时,则返回该值)

手动new实现

function create() {
    //创建一个新的对象
    let obj = {}
    //获取构造函数
    let Con = [].shift.call(arguments)
    //链接构造函数原型
    obj.__proto__ = Con.prototype
    //绑定this
    let result = Con.apply(obj, arguments)
    //判断是否返回object,确保new出来的是个对象
    return typeof result === 'object' ? result : obj
}

/*关于arguments,由于arguments是类数组对象,并没有shift方法(此方法
位于Array原型对象上,Array.prototype.shift)因此此处需要使用call方法调用

在此处使用shift方法既可以获得constructor(The shift() method removes
 the first element from an array and returns that removed element. 
This method changes the length of the array.)还可以将其从arguments中
移除,使的后面调用时,无需再做进一步的处理 。
*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 13,175评论 0 3
  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 6,497评论 0 6
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,736评论 0 21
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,911评论 1 32
  • 【妖约芳香114】 201805021 周一 嘉兴 晴 26--15 当你不再只是为了活下去,而是准备勇...
    棻子阅读 1,198评论 0 0

友情链接更多精彩内容