资讯专栏INFORMATION COLUMN

new操作符都做了什么

liangdas / 1307人阅读

摘要:为什么和的值不一样,要从操作符说起,在的时候,程序做了以下四个创建步骤创建一个空对象将所创建的对象的指向构造函数的实行构造函数中的代码,构造函数中的指向该对象返回该对象除非构造函数中返回了一个对象或者函数注意第步,上述和构造函数中由于返回的

var fun = function () {
    this.name = "peter";
    
    return {
        name: "jack"
    };
}

var fun1 = function() {
    this.name = "peter";
    
    return "jack";
}

var p1 = new fun();
var p2 = new fun1();
p1.name; // jack
p2.name; // peter

为什么p1和p2的name值不一样,要从new操作符说起,在new的时候,程序做了以下四个创建步骤:

创建一个空对象

将所创建的对象的__ proto __指向构造函数的prototype

实行构造函数中的代码,构造函数中的this指向该对象

返回该对象(除非构造函数中返回了一个对象或者函数)

注意第4步,上述 fun和fun1构造函数中由于fun返回的是一个对象,所有p1等于fun中返回的对象,

fun1中返回的不是对象,所有p2.__ proto __等于fun1.prototype;

用代码模拟new创建过程就是

function objectFactory() {
    //把argumnets转化为数组
    var args = Array.prototype.slice.call(arguments);
    // 提取第一个构造对象
    var Constructor = args.shift();
    // 创建constructor实例 instance 
    var instance = Object.create(Constructor.prototype);
    // 使用apply函数运行args,把instance绑定到this
    var temp = Constructor.apply(instance, args);
    //返回对象判断,是object 还是 null 还是实例
    return (typeof temp === "object" ||typeof temp === "function"  && temp !== null ) ? temp : instance;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100696.html

相关文章

  • 简述ES5之object.create()和new() 的区别 做了哪些事

    摘要:注意该参数对象不能是,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。并且使用进行强转作用环境。从而实现了实例的创建。 先说一下object.create() es5中新增的object操作方法object.create() 接受两个参数:Object.create(obj,propertiesObject); obj : 一个对象,是新创建的...

    mmy123456 评论0 收藏0
  • 【周刊-1】三年大厂面试官-面试题精选及答案

    摘要:前言在阿里和腾讯工作了年,当了年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我的中。项目地址是我是小蝌蚪,腾讯高级前端工程师,跟着我一起每周攻克几个前端技术难点。 前言 在阿里和腾讯工作了6年,当了3年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我 Github 的 Weekly-FE-Interview 中。希望对大家有所帮助。 如果你在bat面试的时候遇到了...

    Bamboy 评论0 收藏0
  • 【周刊-1】三年大厂面试官-面试题精选及答案

    摘要:前言在阿里和腾讯工作了年,当了年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我的中。项目地址是我是小蝌蚪,腾讯高级前端工程师,跟着我一起每周攻克几个前端技术难点。 前言 在阿里和腾讯工作了6年,当了3年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我 Github 的 Weekly-FE-Interview 中。希望对大家有所帮助。 如果你在bat面试的时候遇到了...

    ThinkSNS 评论0 收藏0
  • 【前端】从输入页面地址到展示页面信息 浏览器和服务器做了什么

    摘要:很久以前理解过一个从在浏览器地址栏输入,经常建站但是不明白原理,总结一下。浏览器地址栏输入浏览器会先查看浏览器缓存系统缓存路由缓存,如有存在缓存,就直接显示。 很久以前理解过一个URL从在浏览器地址栏输入,经常建站但是不明白原理,总结一下。 showImg(https://segmentfault.com/img/bVbj2Rv?w=512&h=502); 1、浏览器地址栏输入url ...

    Atom 评论0 收藏0

发表评论

0条评论

liangdas

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<