[JS] Как да върна кустумизирана функция, без да ползвам "eval"?


2
Така...
Пиша една библиотечка. В ще има обект към който ще могат да се прикачват N на брой пропъртита, за всяко от които ще се създава сетър и гетър (1 функция която е сетър ако й се подаде нещо и е гетър, ако не й се подаде нищо). Ще има някакъв набор от предефинирани такива гет-сетъри, които ще могат да се преизползват.
примерно, ако кажа: obj.addProp("propName", "bool");
Това ще ми добави пропърти с име "_propName" и функция с име "propName", която ще преизползва предефинираната функция за проверка на bool. Тази функция ще приема само true или false и ще гърми при всичко друго.
Как точно ще стане това: За да има преизползване, аз няма да преписвам цялата предефинирана функция, а ще закача съвсем малка функцийка, която да пренасочва към валидиращата. В конкретния случай трябва да получа функция която изгледа така:
function(value) { return validation.bool("_propName", value); }
Тази функция ще извиква валидацията за bool и ще й казва че тя трябва да работи с пропъртито "_propName", след което и подава стойността за сетване, ако има такава.
какъв е проблема: Искам в тази функция да се използва някаква константа за стринг - тоест - да стане както е горе, а не някаква променлива, която може по някакъв начин да презапиша, или която може изобщо да не съществува когато функцията се ползва. С прости думи - искам да съм сигурен че ще работи.
Трябва ми някаква функция, която да връща посочената горе функция като резултат. Аз всъщност мога да го направя, но с "eval()", а съм чувал че това не е най-добрата практика. Има ли друг начин?



Отговори



0
много просто, връщаш името на функцията това е поинтер самата функция
и си я извикваш след това със скобите и параметрите

тук има добър пример
http://stackoverflow.com/questions/7629891/functions-that-return-a-function-javascript

от bgotov (1559 точки)


0
Това е ясно, но не това попитах във въпроса си. Въпроса е как да го подам тоя параметър. Аз за параметъра искам да е абсолютна константа - никога по никакъв начин да не може да се промени и никога да не изчезва. Напълно запечатан.
"този надпис" е такава константа - той не е в променлива, а просто надпис. Това е идеалния вариант, но не мога да го постигна без eval().
Питам дали има начин да направя нещо което да действа по някакъв друг начин, но да има същия ефект - непроменяем стринг.

от lokiko91 (790 точки)


0

По принцип не знам да има константи в javascript но можеш да защитиш променливите си от това да бъдат променени : тук


от yonchoy (2134 точки)


0
"този надпис" е константа - той не е в променлива, а просто надпис. Това е идеалния вариант, но не мога да го постигна без eval().
Питам дали има начин да направя нещо което да действа по някакъв друг начин, но да има същия ефект - непроменяем стринг.

от lokiko91 (790 точки)


1
Пробвал ли си да си направиш обект, който има само този стринг, който ти е нужен, като на самия обект при създаването му казваш Object.freeze()? Принципно това ти е native начина да направиш нещо read-only, само че работи само с обекти, доколкото знам.

от ksevery (439 точки)


0
Ето това вече е нещо много интересно! Ще го проуча! Благодаря!

от lokiko91 (790 точки)