摘要:為什么和的值不一樣,要從操作符說起,在的時候,程序做了以下四個創建步驟創建一個空對象將所創建的對象的指向構造函數的實行構造函數中的代碼,構造函數中的指向該對象返回該對象除非構造函數中返回了一個對象或者函數注意第步,上述和構造函數中由于返回的
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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 ...
閱讀 3241·2021-10-13 09:39
閱讀 2008·2021-09-27 13:36
閱讀 3069·2021-09-22 16:02
閱讀 2593·2021-09-10 10:51
閱讀 1574·2019-08-29 17:15
閱讀 1529·2019-08-29 16:14
閱讀 3495·2019-08-26 11:55
閱讀 2544·2019-08-26 11:50