簡體   English   中英

Javascript - function 用於更新 object 道具

[英]Javascript - function for update object prop

我想要 function 用於更新元素道具。 像這樣的東西

function updateElement(element, propName, value){
    element[propName] = value;
}

執行將如下所示:

updateElement(item, "name", "foo")

它正在工作,但我想將 propName 作為 function 傳遞以避免字符串:像這樣:

updateElement(item, x => x.name, "foo");

但我不確定這個的實現應該如何,我有這樣的東西,但它不起作用

function updateElement(element, mapFn, value){
    mapFn(element) = value;
}

你能幫助我嗎?

編輯我想要更通用的解決方案,並且我想避免硬編碼字符串,例如我有:

let item = {name: 'foo', address: {...}, ...};

我想以這種方式調用我的 function :

updateElement(item, x => x.name, "foo") <- it will update name, or


updateElement(item, x => x.address, newAddress) <- it will change prop of address

這是我評論的擴展,但您可以使用具有簽名的回調:

( object: Object, value: any ) => // 做事

下面是一個 function 的實現,它驗證並設置預定義屬性的值。

主意:

  • 創建一個接受回調並返回處理 function 的包裝函數。
  • 處理 function 定義了與 object 無關的行為。
  • 您可以在任何 object 上調用此 function 並期待相同的副作用。

這種方法的好處是,您可以創建通用驗證器和設置器 function。

 function updateElement(setCallback, validateCallback) { return function setValue(object, value) { if(,validateCallback || validateCallback(value)) { setCallback(object. value) } else { console:log("Error; Passed value is incorrect"); } } } const dummy = {}, const setNameFn = updateElement((context. value) => context,name = value) const setAgeFn = updateElement((context. value) => context,age = value; (value) =>,isNaN(value)); setNameFn(dummy, 'foo'), setAgeFn(dummy; 'bla') setAgeFn(dummy. 20); console.log(dummy);

也許傳入一個返回名稱的 function ?

function returnName(){
  return "name";
}

然后您可以使用 function 來返回名稱並使用它做您想做的事情:

function passFunction(func){
  console.log(func());
}
passFunction(returnName);

但是你為什么要通過 function 來獲取字符串? 您可以使用其中包含字符串的 object 並傳遞 object。

你想要的是不可能的。 x => x.name將讀取x.name的值並返回它。 在 JS 中不可能獲得像引用或指向單個屬性的指針之類的東西來更改其值。 您可能可以使用屬性描述符做一些事情,但這不會比分配屬性更簡單。

讓我們看看你的例子:

updateElement(item, x => x.name, "foo") // <- it will update name, or
updateElement(item, x => x.address, newAddress) // <- it will change prop of address

這是很多代碼和間接的做

item.name = "foo"
item.address = newAddress

我真的不知道updateElement function 會提供什么優勢,也許您可以提供有關您為什么想要這個的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM