摘要:為什么和的值不一樣,要從操作符說起,在的時(shí)候,程序做了以下四個(gè)創(chuàng)建步驟創(chuàng)建一個(gè)空對(duì)象將所創(chuàng)建的對(duì)象的指向構(gòu)造函數(shù)的實(shí)行構(gòu)造函數(shù)中的代碼,構(gòu)造函數(shù)中的指向該對(duì)象返回該對(duì)象除非構(gòu)造函數(shù)中返回了一個(gè)對(duì)象或者函數(shù)注意第步,上述和構(gòu)造函數(shù)中由于返回的
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的時(shí)候,程序做了以下四個(gè)創(chuàng)建步驟:
創(chuàng)建一個(gè)空對(duì)象
將所創(chuàng)建的對(duì)象的__ proto __指向構(gòu)造函數(shù)的prototype
實(shí)行構(gòu)造函數(shù)中的代碼,構(gòu)造函數(shù)中的this指向該對(duì)象
返回該對(duì)象(除非構(gòu)造函數(shù)中返回了一個(gè)對(duì)象或者函數(shù))
注意第4步,上述 fun和fun1構(gòu)造函數(shù)中由于fun返回的是一個(gè)對(duì)象,所有p1等于fun中返回的對(duì)象,
fun1中返回的不是對(duì)象,所有p2.__ proto __等于fun1.prototype;
用代碼模擬new創(chuàng)建過程就是
function objectFactory() { //把a(bǔ)rgumnets轉(zhuǎn)化為數(shù)組 var args = Array.prototype.slice.call(arguments); // 提取第一個(gè)構(gòu)造對(duì)象 var Constructor = args.shift(); // 創(chuàng)建constructor實(shí)例 instance var instance = Object.create(Constructor.prototype); // 使用apply函數(shù)運(yùn)行args,把instance綁定到this var temp = Constructor.apply(instance, args); //返回對(duì)象判斷,是object 還是 null 還是實(shí)例 return (typeof temp === "object" ||typeof temp === "function" && temp !== null ) ? temp : instance; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/100696.html
摘要:注意該參數(shù)對(duì)象不能是,另外只有該對(duì)象中自身擁有的可枚舉的屬性才有效,也就是說該對(duì)象的原型鏈上屬性是無效的。并且使用進(jìn)行強(qiáng)轉(zhuǎn)作用環(huán)境。從而實(shí)現(xiàn)了實(shí)例的創(chuàng)建。 先說一下object.create() es5中新增的object操作方法object.create() 接受兩個(gè)參數(shù):Object.create(obj,propertiesObject); obj : 一個(gè)對(duì)象,是新創(chuàng)建的...
摘要:前言在阿里和騰訊工作了年,當(dāng)了年的前端面試官,把期間我和我的同事常問的面試題和答案匯總在我的中。項(xiàng)目地址是我是小蝌蚪,騰訊高級(jí)前端工程師,跟著我一起每周攻克幾個(gè)前端技術(shù)難點(diǎn)。 前言 在阿里和騰訊工作了6年,當(dāng)了3年的前端面試官,把期間我和我的同事常問的面試題和答案匯總在我 Github 的 Weekly-FE-Interview 中。希望對(duì)大家有所幫助。 如果你在bat面試的時(shí)候遇到了...
摘要:前言在阿里和騰訊工作了年,當(dāng)了年的前端面試官,把期間我和我的同事常問的面試題和答案匯總在我的中。項(xiàng)目地址是我是小蝌蚪,騰訊高級(jí)前端工程師,跟著我一起每周攻克幾個(gè)前端技術(shù)難點(diǎn)。 前言 在阿里和騰訊工作了6年,當(dāng)了3年的前端面試官,把期間我和我的同事常問的面試題和答案匯總在我 Github 的 Weekly-FE-Interview 中。希望對(duì)大家有所幫助。 如果你在bat面試的時(shí)候遇到了...
摘要:很久以前理解過一個(gè)從在瀏覽器地址欄輸入,經(jīng)常建站但是不明白原理,總結(jié)一下。瀏覽器地址欄輸入瀏覽器會(huì)先查看瀏覽器緩存系統(tǒng)緩存路由緩存,如有存在緩存,就直接顯示。 很久以前理解過一個(gè)URL從在瀏覽器地址欄輸入,經(jīng)常建站但是不明白原理,總結(jié)一下。 showImg(https://segmentfault.com/img/bVbj2Rv?w=512&h=502); 1、瀏覽器地址欄輸入url ...
閱讀 3354·2021-10-13 09:39
閱讀 2090·2021-09-27 13:36
閱讀 3144·2021-09-22 16:02
閱讀 2654·2021-09-10 10:51
閱讀 1647·2019-08-29 17:15
閱讀 1588·2019-08-29 16:14
閱讀 3648·2019-08-26 11:55
閱讀 2615·2019-08-26 11:50