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


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.