摘要:注意該參數(shù)對象不能是,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。并且使用進(jìn)行強轉(zhuǎn)作用環(huán)境。從而實現(xiàn)了實例的創(chuàng)建。
先說一下object.create()
es5中新增的object操作方法object.create() 接受兩個參數(shù):
Object.create(obj,propertiesObject);
obj : 一個對象,是新創(chuàng)建的對象的原型。 即:創(chuàng)建一個空對象,空對象的原型是參數(shù)obj.propertiesObject:可選。該參數(shù)對象是一組屬性與值,該對象的屬性名稱將是新創(chuàng)建的對象的屬性名稱,值是屬性描述符(這些屬性描述符的結(jié)構(gòu)與Object.defineProperties()的第二個參數(shù)一樣)。注意:該參數(shù)對象不能是undefined,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。 即:
propertiesObject = {
like:{ value:"fish", // 初始化賦值
writable:true, // 是否是可改寫的
configurable:true, // 是否能夠刪除,是否能夠被修改
enumerable:true //是否可以用for in 進(jìn)行枚舉 } ..... }
var o = Object.create(null); console.log(o); // {} o.name = "jian"; var o2 = Object.create(o); console.log(o2); // {} console.log(o2.name); // "jian", 沒有找到o2的name屬性==> {} 但是在原型鏈上面可以訪問到 name屬性 所以object.create()創(chuàng)建一個空對象 然后空對象的原型是參數(shù)obj
再來說說new() :
創(chuàng)建空對象;
設(shè)置新對象的constructor屬性為構(gòu)造函數(shù)的名稱,設(shè)置新對象的__proto__屬性指向構(gòu)造函數(shù)的prototype對象;
使用新對象調(diào)用函數(shù),函數(shù)中的this被指向新實例對象:
ClassA.call(obj); //{}.構(gòu)造函數(shù)();
將初始化完畢的新對象地址,保存到等號左邊的變量中
一個包含兩個方法的例子
var test1 = {x:1}; var test2 = new Object(test1); var test3 = Object.create(test1); console.log(test3);//{} //test3等價于test5 var test4 = function(){ } test4.prototype = test1; var test5 = new test4(); console.log(test5); console.log(test5.__proto__ === test3.__proto__);//true console.log(test2);//{x:1}
看完上面的例子應(yīng)該可以區(qū)分兩個方法的區(qū)別了
總結(jié)
使用Object.create()是將對象繼承到__proto__屬性上
var o1 = new Object();
o1.[[Prototype]] = Base.prototype;
Base.call(o1);
new做法是新建一個對象,并且讓對象的__proto__指向了Base.prototype對象。并且使用call 進(jìn)行強轉(zhuǎn)作用環(huán)境。從而實現(xiàn)了實例的創(chuàng)建。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97338.html
摘要:前言見解有限,如有描述不當(dāng)之處,請幫忙及時指出,如有錯誤,會及時修正。倘若用的是中文搜索。所以最終的實例對象仍然能進(jìn)行正常的原型鏈回溯,回溯到原本的所有原型方法這樣通過一個巧妙的欺騙技巧,就實現(xiàn)了完美的繼承。 前言 見解有限,如有描述不當(dāng)之處,請幫忙及時指出,如有錯誤,會及時修正。 20180201更新: 修改用詞描述,如組合寄生式改成寄生組合式,修改多處筆誤(感謝@Yao Ding的...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@??途W(wǎng)發(fā)布的真實大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
摘要:一般我們對這種構(gòu)造函數(shù)命名都會采用,并把它稱呼為類,這不僅是為了跟的理念保持一致,也是因為的內(nèi)建類也是這種命名。由生成的對象,其是。這是標(biāo)準(zhǔn)的規(guī)定。本文的主題是原型系統(tǒng)的變遷,所以并沒有涉及和對原型鏈的影響。 概述 JavaScript 的原型系統(tǒng)是最初就有的語言設(shè)計。但隨著 ES 標(biāo)準(zhǔn)的進(jìn)化和新特性的添加。它也一直在不停進(jìn)化。這篇文章的目的就是梳理一下早期到 ES5 和現(xiàn)在 ES6,...
閱讀 1635·2021-09-08 10:42
閱讀 3618·2021-08-11 10:23
閱讀 3994·2019-08-30 14:10
閱讀 2745·2019-08-29 17:29
閱讀 3103·2019-08-29 12:50
閱讀 654·2019-08-26 13:36
閱讀 3469·2019-08-26 11:59
閱讀 1503·2019-08-23 16:23