美文网首页
实例化一个对象(new)到底做了什么+ 手写实现new

实例化一个对象(new)到底做了什么+ 手写实现new

作者: vivianXIa | 来源:发表于2021-01-30 17:27 被阅读0次

看到个不错的例子 记录下

文字总结一下:

创建了1个空对象
将空对象的constructor的prototype就等于Based的原型
将当前对象的this在Base中执行一边 于是空对象就有了Base的this上的所有值

function Base() {
    this.a = function () {
        console.log('我是Base中的a')
    }
}

Base.prototype.b = function () {
    console.log('我是Base prototype上的b')
}

var obj = new Base();
// 实际上做了以下几件事
// var obj = {};
// obj.__proto__ = Base.prototype;
// Base.call(obj);
// 第一行,我们创建了一个空对象obj
// 第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
// 第三行,我们将Base函数中this上的成员赋值给obj

引申:手写实现一个new

  • 首先创建一个空的对象,空对象的proto属性指向构造函数的原型对象
  • 把上面创建的空对象赋值构造函数内部的this,用构造函数内部的方法修改空对象
  • 如果构造函数返回一个非基本类型的值,则返回这个值,否则上面创建的对象
    写法1:
function _new(fn, ...arg) {
    var obj = Object.create(fn.prototype);
    const result = fn.apply(obj, ...arg);
    return Object.prototype.toString.call(result) == '[object Object]' ? result : obj;
}

写法2:

function myNew (fun, ...arg) {
    // 创建一个新对象且将其隐式原型指向构造函数原型
    let obj = {
        __proto__: fun.prototype 
    }
    // 执行构造函数
    fun.apply(obj, arg)
    
    // 返回该对象
    return obj
}

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

let _person = myNew(Person, 'huang', '21')
console.log(_person)

相关文章

  • 实例化一个对象(new)到底做了什么+ 手写实现new

    看到个不错的例子 记录下 文字总结一下: 创建了1个空对象将空对象的constructor的prototype就等...

  • 单例

    new实现单例 new至少要有一个参数cls,代表要实例化的类,new方法负责创建一个实例对象,在对象被创建的时候...

  • new

    什么是new操作符 new会生成一个实例对象,该对象的this指向该实例 实现一个new操作符

  • new 对象 class

    new 操作符具体干了什么? 当我们new一个数据的时候,new操作符到底做了什么? 首先是创建实例对象{},th...

  • new 关键字模拟实现

    首先,new 是JavaScript用来实例化一个对象的关键字,后边跟着构造函数,例如: 那么,new究竟做了什么...

  • new操作符做了什么事情,手写实现一个new操作

    new操作符做了什么事情,手写实现一个new操作 答: var obj = {} //创建一个空对象。 obj...

  • new的本质

    new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 我们看一下new到底做了什么。 1....

  • new 关键字 执行流程

    new 实例化过程到底执行了什么具体流程呢? 在日常开发过程中我们常常会使用 new 关键字来实例化一个对象 首先...

  • ASP.NET 操作XML文件

    实例化(new)一个XML文档对象:XmlDocument xml = new XmlDocument(); 载入...

  • new 函数做了什么?

    前言 最近看到一个MS题:在实例化对象时,new函数做了什么事情? 开始我是一阵恍惚,new不就是实例化出构造函数...

网友评论

      本文标题:实例化一个对象(new)到底做了什么+ 手写实现new

      本文链接:https://www.haomeiwen.com/subject/dorktltx.html