国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

dabai / 843人閱讀

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

相關(guān)文章

  • Object.create()屬性prototype__proto__影響

    摘要:語法參數(shù)一個對象,作為新創(chuàng)建對象的原型。注意該參數(shù)對象不能是,另外只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。三題目詳解屬性表示對象的原型對象。 下面是一段判斷信息詳情是否有修改的邏輯,貼上項目展示: showImg(https://segmentfault.com/img/bVzcLW); 那么問題來了,大家自行腦補一下如何判斷圖片是否有修改。 一...

    wangbjun 評論0 收藏0
  • 原型鏈?zhǔn)鞘裁??關(guān)于原型鏈中constructor、prototype__proto__之間關(guān)系

    摘要:的隱式原型是母,母是由構(gòu)造函數(shù)構(gòu)造的,但函數(shù)的隱式原型又是。。。??赡苁强紤]到它也是由構(gòu)造函數(shù)生成的吧,所以返回的值也是。 showImg(https://segmentfault.com/img/bVyLk0); 首先,我們暫且把object類型和function類型分開來,因為 function是一個特殊的對象類型,我們這里這是便于區(qū)分,把function類型單獨拿出來。順便一提,...

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

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

    chuyao 評論0 收藏0
  • javascript面向象,原型鏈及繼承

    摘要:也就是說,不必在構(gòu)造函數(shù)中添加定義對象信息,而是可以直接將這些信息添加到原型中。子類的屬性,表示構(gòu)造函數(shù)的繼承,總是指向父類。以前,這些原生構(gòu)造函數(shù)是無法繼承的。 面向?qū)ο?js是一門基于對象的語言。js中的一切皆對象; console.log(Object.prototype.toString.call(123)) //[object Number] console....

    Xufc 評論0 收藏0
  • JS 中 __proto__prototype

    摘要:在這篇文章中,他介紹了一種實現(xiàn)繼承的方法,這種方法并沒有使用嚴(yán)格意義上的構(gòu)造函數(shù)。的左值一般是一個對象,右值一般是一個構(gòu)造函數(shù),用來判斷左值是否是右值的實例。 __proto__ 探究 __proto__隱式原型與prototype顯式原型是個容易令人混淆的概念,簡而言之prototype是構(gòu)造函數(shù)用來被自己的實例繼承的原型,而_proto_是實例用來繼承父類原型的載體。 1. 是什么...

    Donald 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<