第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

返回現(xiàn)有對(duì)象的函數(shù)設(shè)置屬性的函數(shù)。JS

返回現(xiàn)有對(duì)象的函數(shù)設(shè)置屬性的函數(shù)。JS

不負(fù)相思意 2021-08-20 16:46:34
我希望能夠在對(duì)象上生成動(dòng)態(tài)屬性,我嘗試通過(guò)創(chuàng)建一個(gè)函數(shù)來(lái)實(shí)現(xiàn)此目的,該函數(shù)接受一個(gè)輸入對(duì)象,然后返回一個(gè)接受參數(shù)的函數(shù)。該參數(shù)用于設(shè)置動(dòng)態(tài)屬性。我的問(wèn)題是,一旦創(chuàng)建了該函數(shù),我似乎不會(huì)每次都獲得一個(gè)新對(duì)象,而是該函數(shù)在先前分配的對(duì)象上設(shè)置該屬性。我曾嘗試重新分配對(duì)象但無(wú)濟(jì)于事,我已經(jīng)測(cè)試了可行的替代方案(不太理想的代碼),但我想知道為什么我的初始解決方案不起作用。/* Returns a function which will assign a 'required' property to all objects within the given object */const generateSchemaField = obj => {    obj = Object.assign({}, obj);    return function(required = false) {        Object.keys(obj).forEach(key => {            Object.assign(obj[key], {                required,            });        });        return obj;    };};/* The way the above function would be invoked*/const userEmailUsingGenerateSchemaField = generateSchemaField({    user_email: {        type: 'string',        description: 'A user email',    },});/* The below function does not encounter the same problem */const userEmailNotUsingGenerateSchemaField = function(required = false) {    let obj = {        user_email: {            type: 'string',            description: 'A user email',        },    };    Object.keys(obj).forEach(key => {        Object.assign(obj[key], {            required,        });    });    return obj;}; let firstResultUsing = userEmailUsingGenerateSchemaField();let secondResultUsing = userEmailUsingGenerateSchemaField(true);console.log(firstResultUsing);console.log(secondResultUsing);預(yù)期產(chǎn)出{  user_email: { type: 'string', description: 'A user email', required: false }}{  user_email: { type: 'string', description: 'A user email', required: true }}實(shí)際{  user_email: { type: 'string', description: 'A user email', required: true }}{  user_email: { type: 'string', description: 'A user email', required: true }}
查看完整描述

2 回答

?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

短篇小說(shuō)


這是引用同一個(gè)對(duì)象的簡(jiǎn)單問(wèn)題。


為了證明這一點(diǎn),比較兩個(gè)對(duì)象


console.log(firstResultUsing === secondResultUsing)

你會(huì)看到它打印true證明它們都引用了同一個(gè)對(duì)象。


向下滾動(dòng)以獲取解決方案!


長(zhǎng)篇大論


在這一行:


const userEmailUsingGenerateSchemaField = generateSchemaField({

  user_email: {

    type: 'string',

    description: 'A user email',

  },

})

這里發(fā)生的事情是你的generateSchemaField函數(shù)正在返回一個(gè)函數(shù),它有一個(gè)閉包,obj它只是


{

  user_email: {

    type: 'string',

    description: 'A user email',

  },

}

現(xiàn)在在這一行:


const firstResultUsing = userEmailUsingGenerateSchemaField()

該函數(shù)被評(píng)估并返回修改后的對(duì)象


{

  user_email: {

    type: 'string',

    description: 'A user email',

    required: false

  },

}

記住返回的對(duì)象仍然具有相同的引用 obj


現(xiàn)在再次在線(xiàn):


const secondResultUsing = userEmailUsingGenerateSchemaField(true)

這里發(fā)生的事情obj是修改了相同的引用對(duì)象,并使用屬性更新了它required: true


這就是為什么當(dāng)你們console.log都在展示時(shí),required: true因?yàn)樗麄兌家昧送粋€(gè)對(duì)象。


解決方案


const generateSchemaField = obj => {

  return function(required = false) {

    const objClone = JSON.parse(JSON.stringify(obj));

    Object.keys(objClone).forEach(key => {

      Object.assign(objClone[key], {

        required,

      });

    });

    return objClone;

  };

};

讓我們分解一下。我刪除了,obj = Object.assign({}, obj);因?yàn)樗鼪](méi)有任何好處。這似乎是一條多余的線(xiàn)。


接下來(lái),我做了一個(gè)深克隆的obj。記住Object.assign不會(huì)工作,因?yàn)樗皇莿?chuàng)建一個(gè)淺拷貝/克隆,在這里它不會(huì)工作,因?yàn)殒Iemail_id持有對(duì)對(duì)象的引用。請(qǐng)注意,深度克隆JSON.parse(JSON.stringify(obj))僅適用于具有 JSON 安全值(無(wú)函數(shù)undefined等)的對(duì)象。


然后,我操作這個(gè)克隆的對(duì)象并返回它。現(xiàn)在不存在操作相同引用對(duì)象的威脅。


如果這有幫助,或者您需要更好的解釋?zhuān)?qǐng)告訴我。


查看完整回答
反對(duì) 回復(fù) 2021-08-20
  • 2 回答
  • 0 關(guān)注
  • 152 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)