摘要:为什么和的值不一样,要从操作符说起,在的时候,程序做了以下四个创建步骤创建一个空对象将所创建的对象的指向构造函数的实行构造函数中的代码,构造函数中的指向该对象返回该对象除非构造函数中返回了一个对象或者函数注意第步,上述和构造函数中由于返回的
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
摘要:注意该参数对象不能是,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。并且使用进行强转作用环境。从而实现了实例的创建。 先说一下object.create() es5中新增的object操作方法object.create() 接受两个参数:Object.create(obj,propertiesObject); obj : 一个对象,是新创建的...
摘要:前言在阿里和腾讯工作了年,当了年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我的中。项目地址是我是小蝌蚪,腾讯高级前端工程师,跟着我一起每周攻克几个前端技术难点。 前言 在阿里和腾讯工作了6年,当了3年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我 Github 的 Weekly-FE-Interview 中。希望对大家有所帮助。 如果你在bat面试的时候遇到了...
摘要:前言在阿里和腾讯工作了年,当了年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我的中。项目地址是我是小蝌蚪,腾讯高级前端工程师,跟着我一起每周攻克几个前端技术难点。 前言 在阿里和腾讯工作了6年,当了3年的前端面试官,把期间我和我的同事常问的面试题和答案汇总在我 Github 的 Weekly-FE-Interview 中。希望对大家有所帮助。 如果你在bat面试的时候遇到了...
摘要:很久以前理解过一个从在浏览器地址栏输入,经常建站但是不明白原理,总结一下。浏览器地址栏输入浏览器会先查看浏览器缓存系统缓存路由缓存,如有存在缓存,就直接显示。 很久以前理解过一个URL从在浏览器地址栏输入,经常建站但是不明白原理,总结一下。 showImg(https://segmentfault.com/img/bVbj2Rv?w=512&h=502); 1、浏览器地址栏输入url ...
阅读 3164·2021-10-13 09:39
阅读 1977·2021-09-27 13:36
阅读 3043·2021-09-22 16:02
阅读 2550·2021-09-10 10:51
阅读 1541·2019-08-29 17:15
阅读 1503·2019-08-29 16:14
阅读 3426·2019-08-26 11:55
阅读 2507·2019-08-26 11:50