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