Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mendapatkan Nama Kelas Objek dalam JavaScript?

Bagaimana untuk Mendapatkan Nama Kelas Objek dalam JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-12-08 13:27:17406semak imbas

How to Get the Class Name of an Object in JavaScript?

Dalam JavaScript, tiada persamaan langsung dengan kaedah 'class.getName()' Java untuk mendapatkan nama kelas objek.

Kemas Kini ES2015 :

class Foo {}
console.log(Foo.name); // "Foo"

Untuk objek bukan kelas, sebutan 'kelas' boleh didapati menggunakan sifat 'thing.constructor.name'.

var obj = {name: "John"};
console.log(obj.constructor.name); // "Object"

Godaan dan Alternatif:

Walaupun tiada 'class.getName()' asli yang setara , terdapat pelbagai penggodaman dan kaedah alternatif untuk mendapatkan kelas name:

Object.prototype.getName() Hack (tidak disyorkan):

Godam ini mengubah suai prototaip Objek dan menambah fungsi 'getName()' kepada semua objek, membolehkan mereka mengembalikan nama pembina mereka sebagai rentetan.

Object.prototype.getName = function() {
  var funcNameRegex = /function (.{1,})\(/;
  var results = funcNameRegex.exec(this.constructor.toString());
  return results && results.length > 1 ? results[1] : "";
};

var obj = {name: "John"};
console.log(obj.getName()); // "Object"

Menggunakan Harta Pembina (bermasalah):

Setiap objek mempunyai sifat 'pembina' yang menunjuk kepada fungsi pembina yang menciptanya.

var myArray = [1, 2, 3];
console.log(myArray.constructor === Array); // true

Walau bagaimanapun, bergantung pada 'pembina' harta bermasalah kerana:

  • Ia mungkin tidak memberikan maklumat yang tepat dalam kes di mana warisan terlibat.
  • Ia memecahkan bingkai silang dan tetingkap silang.

Menggunakan instanceof (juga bermasalah):

The 'instanceof' operator juga boleh digunakan untuk semakan jenis.

var myArray = [1, 2, 3];
console.log(myArray instanceof Array); // true

Walau bagaimanapun, 'instanceof' tidak berfungsi untuk nilai literal dan juga memecahkan bingkai silang dan tetingkap silang.

Menggunakan Object.prototype.toString:

Object.prototype.toString mengembalikan perwakilan rentetan objek taip.

console.log(Object.prototype.toString.call('abc')); // "[object String]"
console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"

Walaupun pendekatan ini menyediakan maklumat jenis untuk jenis terbina dalam, pendekatan ini mengembalikan 'Objek' untuk semua jenis yang ditentukan pengguna.

Kaveat:

Semua kaedah yang dinyatakan di atas mempunyai kaveat dan mungkin tidak boleh dipercayai dalam semua keadaan. Pertimbangkan kaedah pembinaan objek, terutamanya apabila berurusan dengan pewarisan dan fungsi tanpa nama.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Kelas Objek dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn