摘要:語法參數(shù)一個對象,作為新創(chuàng)建對象的原型。注意該參數(shù)對象不能是,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。三題目詳解屬性表示對象的原型對象。
下面是一段判斷信息詳情是否有修改的邏輯,貼上項目展示:
那么問題來了,大家自行腦補一下如何判斷圖片是否有修改。
一、下面看兩道關(guān)于Object.create()的經(jīng)典面試題 第1題var a = { name: "kelen" }; var b = Object.create(a); b.name = "boke"; console.log(a.name);第2題
var a = { person : { name: "kelen" } }; var b = Object.create(a); b.person.name = "kobe"; console.log( a.person.name );思考
為什么第一個修改obj2的name屬性,obj1的name輸出是one,而第二個卻可以改變呢?
二、解釋:Object.create函數(shù)Object.create()方法創(chuàng)建一個擁有指定原型和若干個指定屬性的對象。
語法Object.create(proto, [ propertiesObject ])
參數(shù)proto
一個對象,作為新創(chuàng)建對象的原型。
propertiesObject
可選。該參數(shù)對象是一組屬性與值,該對象的屬性名稱將是新創(chuàng)建的對象的屬性名稱,值是屬性描述符(這些屬性描述符的結(jié)構(gòu)與Object.defineProperties()的第二個參數(shù)一樣)。注意:該參數(shù)對象不能是 undefined,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。
拋出異常
如果 proto 參數(shù)不是 null 或一個對象值,則拋出一個 TypeError 異常
返回值一個具有指定的內(nèi)部原型且包含指定的屬性(如果有)的新對象。
三、題目詳解Object.prototype 屬性表示對象 Object 的原型對象。
__proto__ 屬性表示對象 Object 的原型,原型的值可以是一個對象也可以為null,比如說Object.prototype.__proto__就是null
從上面的例子分析,當(dāng)var b = Object.create(a);的時候,不等同于b = a,實際上就是
b.__proto__ ==> a; b.prototype ==> a.prototype;
當(dāng)我們對b.name = "kobe"的時候,實際上是在b對象新增一個屬性,并且賦值,但是在b.name = "kobe"之前打印console.log(b.name);的時候輸出"kelen",是因為在原型鏈去找到a的name屬性,所以可以取到a的值
所以下面b.name = "kobe"并不會改變a的name屬性,如果要實現(xiàn)a.name最后的值為kobe的話,可以這樣寫b.__proto__.name = "kobe";
而第二種情況,
b.person.name = "kobe"卻可以改變a.person.name的值是因為,b.person是一個a.person的對象引用,當(dāng)b.person.name進行賦值,實際上就是對a.person.name進行修改,舉一個簡單的引用類型的例子
var a = { name: "kelen" }; var b = a; b.name = "kobe"; console.log(a.name); // kobe四、項目問題詳解 第1題
var a = { name: "kelen" }; var b = Object.create(a); b.name = "boke"; console.log(a.name); // kelen第2題
var a = { person : { name: "kelen" } }; var b = Object.create(a); b.person.name = "kobe"; console.log( a.person.name ); // kobe項目代碼
//原始接口拿到的福利信息, //圖片列表對象 originInfo={ welfareName:"中影國際", imageList:[ { id:"5157", wIFImgUrl:"http://tcw-wsq.b0.upaiyun.com/2016/07/12/34/20160713165313449.jpg" }, { id:"5158", wIFImgUrl:"http://tcw-wsq.b0.upaiyun.com/2016/07/14/34/20160732112832397.jpg" } ] }; //$scope.welfareInfo=originInfo; //no,完全行不通 //$scope.welfareInfo=Object.create(originInfo); //no,不可以 var originInfoCy=JSON.stringify(originInfo); //stringify用于從一個對象解析出字符串 $scope.welfareInfo=JSON.parse(originInfoCy); //parse 用于從一個字符串中解析出json 對象
對于這個問題正確的處理方法是,將originInfo對象轉(zhuǎn)變成字符串,字符串并不是引用類型的,繼而再轉(zhuǎn)換成對象,它就完美解決問題啦啦。。。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/49926.html
摘要:語法參數(shù)一個對象,作為新創(chuàng)建對象的原型。注意該參數(shù)對象不能是,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。三題目詳解屬性表示對象的原型對象。 下面是一段判斷信息詳情是否有修改的邏輯,貼上項目展示: showImg(https://segmentfault.com/img/bVzcLW); 那么問題來了,大家自行腦補一下如何判斷圖片是否有修改。 一...
摘要:的隱式原型是母,母是由構(gòu)造函數(shù)構(gòu)造的,但函數(shù)的隱式原型又是。。。??赡苁强紤]到它也是由構(gòu)造函數(shù)生成的吧,所以返回的值也是。 showImg(https://segmentfault.com/img/bVyLk0); 首先,我們暫且把object類型和function類型分開來,因為 function是一個特殊的對象類型,我們這里這是便于區(qū)分,把function類型單獨拿出來。順便一提,...
摘要:一般我們對這種構(gòu)造函數(shù)命名都會采用,并把它稱呼為類,這不僅是為了跟的理念保持一致,也是因為的內(nèi)建類也是這種命名。由生成的對象,其是。這是標(biāo)準(zhǔn)的規(guī)定。本文的主題是原型系統(tǒng)的變遷,所以并沒有涉及和對原型鏈的影響。 概述 JavaScript 的原型系統(tǒng)是最初就有的語言設(shè)計。但隨著 ES 標(biāo)準(zhǔn)的進化和新特性的添加。它也一直在不停進化。這篇文章的目的就是梳理一下早期到 ES5 和現(xiàn)在 ES6,...
摘要:也就是說,不必在構(gòu)造函數(shù)中添加定義對象信息,而是可以直接將這些信息添加到原型中。子類的屬性,表示構(gòu)造函數(shù)的繼承,總是指向父類。以前,這些原生構(gòu)造函數(shù)是無法繼承的。 面向?qū)ο?js是一門基于對象的語言。js中的一切皆對象; console.log(Object.prototype.toString.call(123)) //[object Number] console....
摘要:在這篇文章中,他介紹了一種實現(xiàn)繼承的方法,這種方法并沒有使用嚴(yán)格意義上的構(gòu)造函數(shù)。的左值一般是一個對象,右值一般是一個構(gòu)造函數(shù),用來判斷左值是否是右值的實例。 __proto__ 探究 __proto__隱式原型與prototype顯式原型是個容易令人混淆的概念,簡而言之prototype是構(gòu)造函數(shù)用來被自己的實例繼承的原型,而_proto_是實例用來繼承父類原型的載體。 1. 是什么...
閱讀 3431·2021-10-14 09:42
閱讀 2718·2021-09-08 10:44
閱讀 1300·2021-09-02 10:18
閱讀 3600·2021-08-30 09:43
閱讀 2794·2021-07-29 13:49
閱讀 3719·2019-08-29 17:02
閱讀 1577·2019-08-29 15:09
閱讀 1035·2019-08-29 11:01