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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將對象的屬性應用于函數(shù)的參數(shù)

將對象的屬性應用于函數(shù)的參數(shù)

達令說 2023-02-24 16:57:16
假設我有一個函數(shù)(可能來自第 3 方庫,假設我不能更改它的定義),以及一個具有與函數(shù)參數(shù)匹配或重疊的屬性的對象:function fn(foo, bar, baz) { /* do stuff */ }var obj = { foo: "yes", bar: 7, baz: false }有沒有一種方法可以使用某種解構或擴展分配或其他一些 ES6 功能將對象屬性應用為函數(shù)參數(shù),或者我是否堅持單獨指定每個參數(shù)?fn(...obj); // Doesn't workfn(obj.foo, obj.bar, obj.baz); // Convoluted but worksfn.apply(null, obj.values()); // Might work if you're lucky
查看完整描述

3 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

您可以為以下內容創(chuàng)建一個包裝函數(shù)fn

const myFn = ({foo, bar, baz}) => fn(foo, bar, baz);

然后你的電話簡化為:

myFn(obj);


查看完整回答
反對 回復 2023-02-24
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

這是一個丑陋的 hack,應該避免,但它確實有效(即使對象的值與參數(shù)的順序不同)。


const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;

const ARGUMENT_NAMES = /([^\s,]+)/g;

function getParamNames(func) {

  const fnStr = func.toString().replace(STRIP_COMMENTS, '');

  let result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);

  if(result === null)

     result = [];

  return result;

}


function fn(foo, bar, baz) {

  return {foo, bar, baz};

}


const obj = { foo: "yes", baz: false, bar: 7 };


const result = fn(...getParamNames(fn).map(name => obj[name]));

console.log(result);

注意:該函數(shù)的getParamNames功勞歸功于如何動態(tài)獲取函數(shù)參數(shù)名稱/值?


查看完整回答
反對 回復 2023-02-24
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您應該解構函數(shù)內的鍵對象對。

const fn = (opts) => {

  const { foo, bar, baz } = opts; // Your function's "parameters"

  console.log({ foo, bar, baz });

}


const obj = { PI: Math.PI, bar: 7, baz: false, foo: "yes" };


fn(obj);


天真的方法是使用擴展運算符(或 apply-null 技術)調用函數(shù),但這并不能保證對象中的鍵值對與參數(shù)的預期順序對齊。


function fn(foo, bar, baz) {

  console.log(arguments);

}


const obj = { foo: "yes", bar: 7, baz: false };


fn(...Object.values(obj)); // or fn.apply(null, Object.values(obj))


查看完整回答
反對 回復 2023-02-24
  • 3 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號