美文网首页
JavaScript之模拟实现new

JavaScript之模拟实现new

作者: smaVivian | 来源:发表于2019-02-25 15:12 被阅读0次

使用 new 来调用函数,或者说发生构造函数调用时,会自动执行下面的操作。

  1. 创建(或者说构造)一个全新的对象。
  2. 这个新对象会被执行 [[ 原型 ]] 连接。
  3. 这个新对象会绑定到函数调用的 this 。
  4. 如果函数没有返回其他对象,那么 new 表达式中的函数调用会自动返回这个新对象。
function fn() {
    ...
}

var p1 = new fn(...)
// 使用 objectFactory模拟new
var p1 = objectFactory(fn, ...)

模拟实现:

function objectFactory() {
    var obj = new Object();
    construc = [].shift.call(arguments);  // 从类数组中取出第一个
    obj.__proto__ = construc.prototype;
    var res = construc.apply(obj, arguments);  // 注意此时的arguments已被取出第一个值
    return typeof res === 'object' ? res : obj;
}

// 测试
function fn(name) {
    this.name = name;
    this.age = 20;
}
var p1 = objectFactory(fn, 'Tom');
console.log(p1.name);
console.log(p1.age);
// 'Tom'
// 20

相关文章

  • new的模拟实现

    原文出处 JavaScript深入之new的模拟实现 new 我们在模拟 new 之前,先看看 new 实现了哪些...

  • JavaScript之模拟实现new

    使用 new 来调用函数,或者说发生构造函数调用时,会自动执行下面的操作。 创建(或者说构造)一个全新的对象。 这...

  • 学习Javascript之模拟实现new

    前言 本文1021字,阅读大约需要5分钟。 总括: 本文对new进行了一个简单介绍,然后使用一个函数模拟实现了n...

  • JavaScript深入之new的模拟实现

    已离开简书,原因参见 http://www.jianshu.com/p/0f12350a6b66。 虽人微言轻,但...

  • JavaScript深入之new的模拟实现

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 也许有点难懂,我们在模拟 new ...

  • JavaScript深入之new的模拟实现

    JavaScript深入系列第十二篇,通过new的模拟实现,带大家揭开使用new获得构造函数实例的真相 new 一...

  • bind的模拟实现

    原文出处 JavaScript深入之bind的模拟实现 bind 我们在模拟 bind之前,先看看 bind实现了...

  • 登登

    基础知识点与高频考题 JavaScript基础 防抖/节流 new 的实现原理,模拟实现一下 this指向 如果用...

  • Underscore源码阅读:bind

    bind函数 参考:JavaScript深入之bind的模拟实现 bind(function, object, *...

  • JavaScript中的复用和抽象

    复用、抽象 JavaScript实现方式 模拟Java中的类有new、this,但是缺少继承等关键特性,ES6开始...

网友评论

      本文标题:JavaScript之模拟实现new

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