Bagaimana saya dapat memeriksa jika objek anonim yang dibuat seperti itu:
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
memang memiliki prop2 didefinisikan?
prop2
akan selalu didefinisikan sebagai fungsi, tetapi untuk beberapa objek tidak diperlukan dan tidak akan didefinisikan.
Saya mencoba apa yang disarankan di sini: Bagaimana menentukan apakah Objek JavaScript Asli memiliki Properti / Metode? tapi saya tidak berpikir itu berfungsi untuk objek anonim.
javascript
Omar
sumber
sumber
Jawaban:
typeof myObj.prop2 === 'function';
akan memberi tahu Anda jika fungsi tersebut ditentukan.sumber
if(typeof myObj[propoeryStr] === 'function') { ... }
Anda ingin
hasOwnProperty()
:Referensi: Mozilla , Microsoft , phrogz.net .
sumber
var my_obj = {'node1': document.createElement('div')};
itumy_obj.node1.hasOwnProperty('cloneNode')
salah. namun solusi Sean akan benar kembali benar:typeof my_obj.node1.cloneNode === 'function'
3 Opsi
typeof myObj.prop2 === 'function'
jika nama properti tidak dinamis / dihasilkanmyObj.hasOwnProperty('prop2')
jika nama properti dinamis, dan hanya periksa apakah itu properti langsung (bukan ke bawah rantai prototipe)'prop2' in myObj
jika nama properti dinamis, dan periksa rantai prototipesumber
Apa yang Anda maksud dengan "objek anonim?"
myObj
bukan anonim karena Anda telah menetapkan objek literal ke variabel. Anda bisa menguji ini:sumber
Salah satu cara untuk melakukannya pastilah
if (typeof myObj.prop1 != "undefined") {...}
sumber
Saya tahu ini adalah pertanyaan lama, tetapi saya terkejut bahwa semua jawaban memastikan bahwa metode itu ada dan ini adalah fungsi, ketika OP hanya ingin memeriksa keberadaannya. Untuk mengetahuinya adalah fungsi (seperti yang telah disebutkan) Anda dapat menggunakan:
Tetapi Anda juga dapat menggunakan sebagai kondisi:
Atau bahkan:
Ini karena suatu fungsi mengevaluasi
true
danundefined
mengevaluasifalse
. Jadi, jika Anda tahu bahwa jika anggota itu hanya berfungsi, Anda dapat menggunakan:Atau dalam ekspresi:
sumber