কোন বস্তুর পদ্ধতি কীভাবে পাবেন?


90

কোনও বস্তু থেকে সমস্ত পদ্ধতি পাওয়ার জন্য কোনও পদ্ধতি বা যথাযথতা আছে কি? উদাহরণ স্বরূপ:

function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}

foo.get_methods(); // returns ['a', 'b'];

আপডেট: জ্যাকুরিতে এর মতো কোনও পদ্ধতি আছে?

ধন্যবাদ.


উত্তর:


71
function getMethods(obj)
{
    var res = [];
    for(var m in obj) {
        if(typeof obj[m] == "function") {
            res.push(m)
        }
    }
    return res;
}

4
for..inপথ মান পন্থা।
মাকরাম সালেহ

4
আপনার সম্পাদনার জন্য ধন্যবাদ, ক্রিস! আমার মনে হয় আপনি প্রকারভেদ পছন্দ করেছেন ...TypeError: '[object Object]' is not a function (evaluating 'obj(m)')
জুলিয়ান এফ ওয়েইনার্ট

কোড এখন স্কোয়ার বন্ধনী দ্বারা স্থির করা হয়েছে। অসুবিধার জন্য দুঃখিত.
মাকরাম সালেহ

সুবিধার জন্য অ্যারে বাছাই যুক্ত।
সোমগুইঅনাকম্পিউটার

শর্তটি মূল্যায়ন করলে কি পার্থক্য আছে m instanceof Function?
জোসে

46

মনে রাখবেন যে প্রযুক্তিগতভাবে জাভাস্ক্রিপ্ট অবজেক্টগুলির কোনও পদ্ধতি নেই। তাদের বৈশিষ্ট্য রয়েছে যার মধ্যে কয়েকটি ফাংশন অবজেক্ট হতে পারে। এর অর্থ হল আপনি কোনও বস্তুর মধ্যে যেমন পদ্ধতিগুলি গুণন করতে পারেন তেমন পদ্ধতিগুলি গণনা করতে পারেন। এটি (বা এর কাছাকাছি কিছু) কাজ করা উচিত:

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}

এতে জটিলতা রয়েছে কারণ বস্তুর কিছু বৈশিষ্ট্য গুণতে পারে না তাই আপনি বস্তুর প্রতিটি ফাংশন খুঁজে পেতে সক্ষম হবেন না ।


4
সম্ভবত তিনি কনসোল.লগ সম্পর্কে কথা বলছিলেন। ধন্যবাদ.
থম

4
হ্যাঁ, আমি প্রতিদিন জেএস করি না তাই আমি এতে 100% আপ না। তবে আমি ভাষাটি বুঝতে পারি ..
ইনস্টল করুন মোনিকা ল্যারি ওস্টারম্যান

27

আপনি console.dir(object)কনসোলে সেই বস্তুর বৈশিষ্ট্যগুলি লিখতে ব্যবহার করতে পারেন ।


19

আধুনিক ব্রাউজারগুলিতে আপনি Object.getOwnPropertyNamesকোনও সামগ্রীতে সমস্ত সম্পত্তি (গণনাযোগ্য এবং অ-গণনীয় উভয়) পেতে ব্যবহার করতে পারেন । এই ক্ষেত্রে:

function Person ( age, name ) {
    this.age = age;
    this.name = name;
}

Person.prototype.greet = function () {
    return "My name is " + this.name;
};

Person.prototype.age = function () {
    this.age = this.age + 1;
};

// ["constructor", "greet", "age"]
Object.getOwnPropertyNames( Person.prototype );

নোট করুন যে এটি কেবল নিজস্ব-বৈশিষ্ট্যগুলি পুনরুদ্ধার করে , তাই এটি প্রোটোটাইপ শৃঙ্খলে অন্য কোথাও পাওয়া বৈশিষ্ট্যগুলি ফিরিয়ে দেয় না। এটি তবে আপনার অনুরোধ বলে মনে হচ্ছে না তাই আমি ধরে নেব এই পদ্ধতিটি যথেষ্ট।

আপনি যদি কেবল অগণিত বৈশিষ্ট্য দেখতে চান তবে আপনি তার পরিবর্তে ব্যবহার করতে পারেন Object.keys। এটি একই সংগ্রহটি ফিরিয়ে আনবে, অগণনীয় constructorসম্পত্তি বিয়োগ করবে ।


6

পদ্ধতিগুলি ব্রাউজারের বিকাশকারী সরঞ্জাম (F12) ব্যবহার করে অবজেক্টটির প্রোটোটাইপ শৃঙ্খলে পরিদর্শন করা যেতে পারে:

  console.log(yourJSObject);

বা আরও সরাসরি

  console.dir(yourJSObject.__proto__);

4

ES6 এ:

let myObj   = {myFn : function() {}, tamato: true};
let allKeys = Object.keys(myObj);
let fnKeys  = allKeys.filter(key => typeof myObj[key] == 'function');
console.log(fnKeys);
// output: ["myFn"]

4

আমার জন্য, চূড়ান্ত সম্প্রসারণ শ্রেণীর পদ্ধতিগুলি পাওয়ার একমাত্র নির্ভরযোগ্য উপায়টি হ'ল:

function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}

2
var funcs = []
for(var name in myObject) {
    if(typeof myObject[name] === 'function') {
        funcs.push(name)
    }
}

আমি কোনও ফোনে আধা কলোন নেই: তবে এটি সাধারণ ধারণা।


4
কোন ফোনে কোনও আধা-কলোন নেই তবে আপনাকে প্রশ্নের উত্তর দিতে দেয়? এলএল
হোগান

আমি মনে করি একটি নতুন ফোন আপনার নাম কলোন !
রেডউল্ফ প্রোগ্রামগুলি

1
var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}

আপনি কেবল কোনও কন্সট্রাক্টরের প্রোটোটাইপটি লুপ করতে পারেন এবং সমস্ত পদ্ধতি বের করতে পারেন।


এটি অবজেক্টের সাথে সরাসরি সংযুক্ত পদ্ধতিগুলির জন্য অ্যাকাউন্ট করবে না
ম্যাট গ্রেয়ার

@ ম্যাটগ্রিয়ার তার উদাহরণটিকে কনস্ট্রাক্টরের একটি পদ্ধতি বলেছিলেন। সে কনস্ট্রাক্টরের কাছ থেকে পদ্ধতি চায় বা কোনও বস্তু ভিন্ন বিষয়।
রায়নস

1

সবচেয়ে ভাল উপায়:

let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)

কেবল এসআই-তে 'লেট' ব্যবহার করুন, পরিবর্তে 'ভার' ব্যবহার করুন


4
এটি বৈশিষ্ট্যের একটি তালিকা ফেরত দেয়।
আলী বেন মেসাউদ

আলি ইঙ্গিত হিসাবে, এটি একটি শ্রেণীর (পদ্ধতি) এ গেটার / সেটার হিসাবে সংজ্ঞায়িত ফাংশনগুলি বাদ দেয়।
শন

0

ক্রোম হয় keys(foo.prototype)। রিটার্নস ["a", "b"]

দেখুন: https://developer.chrome.com/devtools/docs/commandline-api#keysobjectএখানে চিত্র বর্ণনা লিখুন

পরে সম্পাদনা করুন: আপনার যদি এটির দ্রুত কপি করতে হয় (বড় অবজেক্টের জন্য), করুন copy(keys(foo.prototype))এবং আপনার এটি ক্লিপবোর্ডে থাকবে।


0

পদ্ধতির নাম পান:

var getMethodNames = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    }));
};

বা, পদ্ধতিগুলি পান:

var getMethods     = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    })).map(function (key) {
        return obj[key];
    });
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.