Fonksiyonni funktsiyani ishlatmasdan boshqa funktsiyaning ichida chaqira olamanmi?

function man(){

 function add(a,b){
     return a+b;
 }

 function sub(a,b){
     return a-b;
 }

 function pow(a){
     return a**a;
 }
}

man('pow',2);

Iqtidor funktsiyasini "odam" ("pow", 2) chaqiruvidan foydalanib chaqirishning biron bir usuli bormi? .. ???

3

6 javoblar

Agar sizning funktsiyalaringiz global miqyosda bo'lsa, shunchaki qilmang

window[functionName](a, b);

Biroq, ular sizning shaxsiy ko'lamda bo'lganligidan ularni ayrim qatorlarga qo'shishni tavsiya qilaman:

function man(func, arg1, arg2) {
    var functions = {
        add: function (a, b){
            return a+b;
        },
        sub: function(a, b){
            return a-b;
        },
        pow: function (a){
            return Math.pow(a, a);
        }
    };

    functions[func](arg1, arg2);
}

Note that ** works only in ES7

2
qo'shib qo'ydi
Bizda oyna ob'ekti bo'lmagan joylar - masalan, NodeJS?
qo'shib qo'ydi muallif Krzysztof Safjanowski, manba

Funksiyalarga havola sifatida ob'ektdan foydalanishingiz mumkin.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function man() {
    function add(a, b) { return a + b; }
    function sub(a, b) { return a - b; }
    function pow(a) { return a ** a; }

    return { add, sub, pow }[arguments[0]](...[].slice.call(arguments, 1));
}

console.log(man('pow', 2));
console.log(man('add', 4, 5));
</div> </div>
1
qo'shib qo'ydi

Agar kalit bilan bog'langan har bir funktsiyani saqlasangiz, siz uning kalitiga ko'ra funksiyani chaqira olasiz:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function man() {
  var funcs = {
    add: function(a, b) {
      return a + b;
    },
    sub: function(a, b) {
      return a - b;
    },
    pow: function(a) {
      return a ** a;
    }
  };
  return funcs[arguments[0]].apply(this, Array.prototype.slice.call(arguments, 1));
}

console.log('pow of 2 = ' + man('pow', 2));
console.log('add 2 and 6 = ' + man('add', 2, 6));
console.log('sub 2 from 8 = ' + man('sub', 8, 2));
</div> </div>

apply allows you convert the arguments (which is like an array) into the equivalent of a bunch of parameters.

Array.prototype.slice.call allows you to convert the arguments into an actual array so that you can skip the first one (which was used to identify the function to call).

1
qo'shib qo'ydi

Yo'q. Bu axborotni/dasturni yashirishning asosiy usullaridan biridir - yopilishda . Chetga ta'sir qilmaydigan qiymatga kirishning hech qanday usuli yo'q.

Ehtimol, siz obyektini qidirmoqdasiz :

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var man = {

 add(a,b) {
     return a+b;
 },

 sub(a,b) {
     return a-b;
 },

 pow(a) {
     return a**a;
 }
};

console.log(man.pow(2));
</div> </div>
1
qo'shib qo'ydi

Eh, baholashni ishlatish yaxshi emas. Lekin, bu ishlaydi

function man(funName, a, b){

 function add(a,b){
     return a+b;
 }

 function sub(a,b){
     return a-b;
 }

 function pow(a){
     return a**a;
 }

 return (eval(funName))(a, b)
}

man('pow',2);
1
qo'shib qo'ydi

Bu erda kerakli narsani amalga oshirish uchun siz Javascript Tugashlar ni foydalanishingiz mumkin.

0
qo'shib qo'ydi
Va bunday vaziyatda qanday qilib foydalanish mumkin?
qo'shib qo'ydi muallif Justinas, manba
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb