Apakah ada metode atau properti untuk mendapatkan semua metode dari suatu objek? Sebagai contoh:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
UPDATE: Apakah ada metode seperti itu di Jquery?
Terima kasih.
Jawaban:
function getMethods(obj) { var res = []; for(var m in obj) { if(typeof obj[m] == "function") { res.push(m) } } return res; }
sumber
for..in
cara adalah pendekatan standar.TypeError: '[object Object]' is not a function (evaluating 'obj(m)')
m instanceof Function
?Ingatlah bahwa objek javascript secara teknis tidak memiliki metode. Mereka memiliki properti, beberapa di antaranya mungkin berupa objek fungsi. Itu berarti Anda dapat menghitung metode dalam sebuah objek seperti Anda dapat menghitung properti. Ini (atau sesuatu yang dekat dengan ini) harus berfungsi:
var bar for (bar in foo) { console.log("Foo has property " + bar); }
Ada komplikasi untuk ini karena beberapa properti objek tidak dapat dihitung sehingga Anda tidak akan dapat menemukan setiap fungsi pada objek.
sumber
Anda dapat menggunakan
console.dir(object)
untuk menulis properti objek ke konsol.sumber
Di browser modern, Anda dapat menggunakan
Object.getOwnPropertyNames
untuk mendapatkan semua properti (baik yang dapat dihitung maupun yang tidak dapat dihitung) pada suatu objek. Contohnya: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 );
Perhatikan bahwa ini hanya mengambil properti sendiri , jadi tidak akan mengembalikan properti yang ditemukan di tempat lain di rantai prototipe. Namun, itu sepertinya bukan permintaan Anda, jadi saya akan menganggap pendekatan ini sudah cukup.
Jika Anda hanya ingin melihat enumerable properti yang dapat , Anda dapat menggunakan
Object.keys
. Ini akan mengembalikan koleksi yang sama, dikurangi properti non-enumerableconstructor
.sumber
Metode dapat diperiksa dalam rantai prototipe objek menggunakan alat pengembang browser (F12):
console.log(yourJSObject);
atau lebih langsung
console.dir(yourJSObject.__proto__);
sumber
Di 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"]
sumber
bagi saya, satu-satunya cara yang dapat diandalkan untuk mendapatkan metode kelas perluasan terakhir, adalah dengan melakukan seperti ini:
function getMethodsOf(obj){ const methods = {} Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => { methods[methodName] = obj[methodName] }) return methods }
sumber
var funcs = [] for(var name in myObject) { if(typeof myObject[name] === 'function') { funcs.push(name) } }
Saya menggunakan telepon tanpa titik koma :) tetapi itu adalah ide umumnya.
sumber
var methods = []; for (var key in foo.prototype) { if (typeof foo.prototype[key] === "function") { methods.push(key); } }
Anda cukup mengulang prototipe konstruktor dan mengekstrak semua metode.
sumber
cara terbaik adalah:
let methods = Object.getOwnPropertyNames(yourobject); console.log(methods)
gunakan 'let' hanya di es6, gunakan 'var' sebagai gantinya
sumber
Di Chrome adalah
keys(foo.prototype)
. Kembali["a", "b"]
.Lihat: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Edit nanti: Jika Anda perlu menyalinnya dengan cepat (untuk objek yang lebih besar), lakukan
copy(keys(foo.prototype))
dan Anda akan memilikinya di clipboard.sumber
Dapatkan Nama Metode:
var getMethodNames = function (obj) { return (Object.getOwnPropertyNames(obj).filter(function (key) { return obj[key] && (typeof obj[key] === "function"); })); };
Atau, Dapatkan Metode:
var getMethods = function (obj) { return (Object.getOwnPropertyNames(obj).filter(function (key) { return obj[key] && (typeof obj[key] === "function"); })).map(function (key) { return obj[key]; }); };
sumber