জাভাস্ক্রিপ্ট গতিশীলভাবে স্ট্রিং থেকে অবজেক্ট পদ্ধতিতে প্রার্থনা করে


96

স্ট্রিং হিসাবে মেথডের নাম থাকা কোনও অবজেক্ট মেথডকে আমি ডায়নামিকভাবে কল করতে পারি? আমি এটি এইভাবে কল্পনা করব:

var FooClass = function() {
    this.smile = function() {};
}

var method = "smile";
var foo = new FooClass();

// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();

উত্তর:


213

সম্পত্তিটির নাম যদি কোনও ভেরিয়েবলে সঞ্চয় থাকে তবে ব্যবহার করুন []

foo[method]();

4
এটা আমার জন্য কাজ করছে না একটি ফাংশন ভিতরে একটি পরিবর্তনশীল ব্যবহার করছে: const genericResolver = (টেবিল কর্ম, মান) => {ফিরতি Auth.isAuthenticated () .then (() => {ফিরতি Eval (টেবিল) .findAll ()
stackdave

আপনি যদি ক্লাসের মধ্যে অন্য কোনও পদ্ধতি থেকে কোনও পদ্ধতি চালনা করতে চান তবে এই ['মেথডনেম'] () ব্যবহার করুন।
schlingel

4
এই কুৎসিত ত্রুটি Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass'অন্য কাউকে পেয়েছেন?
আনন্দ রকজ

33

অ্যারের স্বরলিপি মাধ্যমে বস্তুর বৈশিষ্ট্য অ্যাক্সেস করা যায়:

var method = "smile";
foo[method](); // will execute the method "smile"

4

পদ্ধতি eval("foo." + method + "()"); খুব ভাল উপায় নাও হতে পারে eval সঙ্গে কল হতে পারে।


আমার ক্ষেত্রে দরকারী যেখানে fooহয় { fields: [{ id: 1 }] }এবং methodহয় fields[0]?.id, কিন্তু আমি মুছে ফেলার জন্য ছিল ()আপনার প্রস্তাবিত উত্তর থেকে
Rorrim

4

আমরা যখন কোনও বস্তুর ভিতরে কোনও ফাংশন কল করি তখন আমাদের স্ট্রিং হিসাবে ফাংশনটির নাম সরবরাহ করা প্রয়োজন।

var obj = {talk: function(){ console.log('Hi') }};

obj['talk'](); //prints "Hi"
obj[talk]()// Does not work

4
আপনার কোডটি দিয়ে কিছু মন্তব্য দেওয়ার জন্য এটি সর্বদা সহায়ক so
ফিল কুপার

কিছু মন্তব্য যুক্ত। ধন্যবাদ!
sn

0

আমি এর জন্য এখানে একটি উদাহরণ রেখে যেতে চাই। উদাহরণ স্বরূপ; ফর্মটি জমা দেওয়ার সময় আমি গতিশীল চেক পদ্ধতিতে কল করতে চাই।

<form data-before-submit="MyObject.myMethod">
    <button type="submit">Submit</button>
</form>
$('form').on('submit', function(e){

    var beforeSubmit = $(this).attr('data-before-submit');

    if( beforeSubmit ){

       params = beforeSubmit.split(".");
       objectName = params[0];
       methodName = params[1];

       result = window[objectName][methodName]($(this));

       if( result !== true ){
           e.preventDefault();
       }

    }

});

var MyObject = {
    myMethod = function(form){
        console.log('worked');
        return true;
    }
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.