js手动实现new

1,创建一个空对象
2,链接到构造函数的原型
3,绑定this到该对象
4,返回新对象

function newF(FN, ...args) {
    var obj = {}
    obj.__proto__ = FN.prototype
    var result = FN.apply(obj, args)
    return typeof result === "object" ? result : obj
}

function Person(name, age) {
    this.name = name
    this.age = age
}

var p = newF(Person, "bobo", 23)
console.log(p)

console.log(p instanceof Person)

使用Object.create简化写法

function newF(FN, ...args) {
    var obj = Object.create(FN.prototype)
    var result = FN.apply(obj, args)
    return typeof result === "object" ? result : obj
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,615评论 0 5
  • JavaScript语言精粹 前言 约定:=> 表示参考相关文章或书籍; JS是JavaScript的缩写。 本书...
    微笑的AK47阅读 587评论 0 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,149评论 0 21
  • 第一章 错误处理: 错误: 程序运行过程中,导致程序无法正常执行的现象(即bug) 现象: 程序一旦出错,默认会报...
    fastwe阅读 1,135评论 0 1
  • 梦是什么? 年轻的我们,最爱做梦,可往往那梦就像是五色斑斓的肥皂泡,虽然美,但经不起现实的风雨,转眼就破了,再也不...
    MrME_Lee阅读 199评论 0 0