成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Object.create()對(duì)對(duì)象屬性prototype和__proto__的影響

wangbjun / 2994人閱讀

摘要:語(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

相關(guān)文章

  • Object.create()對(duì)對(duì)屬性prototype__proto__影響

    摘要:語(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ǔ)一下如何判斷圖片是否有修改。 一...

    dabai 評(píng)論0 收藏0
  • 原型鏈?zhǔn)鞘裁??關(guān)于原型鏈中constructor、prototype__proto__之間關(guān)系認(rèn)

    摘要:的隱式原型是母,母是由構(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)。順便一提,...

    kaka 評(píng)論0 收藏0
  • JavaScript 原型系統(tǒng)變遷,以及 ES6 class

    摘要:一般我們對(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,...

    chuyao 評(píng)論0 收藏0
  • javascript面向對(duì)象,原型鏈及繼承

    摘要:也就是說(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....

    Xufc 評(píng)論0 收藏0
  • JS 中 __proto__prototype

    摘要:在這篇文章中,他介紹了一種實(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. 是什么...

    Donald 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<