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