Jak mogę sprawdzić, czy anonimowy obiekt, który został utworzony jako taki:
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
czy rzeczywiście ma zdefiniowaną prop2?
prop2
będzie zawsze definiowana jako funkcja, ale dla niektórych obiektów nie jest wymagana i nie zostanie zdefiniowana.
Wypróbowałem to, co zostało tutaj zasugerowane: Jak ustalić, czy natywny obiekt JavaScript ma właściwość / metodę? ale nie sądzę, żeby to działało w przypadku anonimowych obiektów.
javascript
Omar
źródło
źródło
Odpowiedzi:
typeof myObj.prop2 === 'function';
poinformuje Cię, czy funkcja jest zdefiniowana.źródło
if(typeof myObj[propoeryStr] === 'function') { ... }
Chcesz
hasOwnProperty()
:Źródła : Mozilla , Microsoft , phrogz.net .
źródło
var my_obj = {'node1': document.createElement('div')};
tomy_obj.node1.hasOwnProperty('cloneNode')
jest fałszywe. jednak rozwiązanie Seana zwróci prawdę:typeof my_obj.node1.cloneNode === 'function'
3 Opcje
typeof myObj.prop2 === 'function'
jeśli nazwa właściwości nie jest dynamiczna / generowanamyObj.hasOwnProperty('prop2')
jeśli nazwa właściwości jest dynamiczna i sprawdza tylko, czy jest to własność bezpośrednia (nie w dół łańcucha prototypów)'prop2' in myObj
jeśli nazwa właściwości jest dynamiczna, sprawdź łańcuch prototypówźródło
Co masz na myśli mówiąc o „anonimowym obiekcie”?
myObj
nie jest anonimowy, ponieważ przypisałeś literał obiektowy do zmiennej. Możesz to po prostu przetestować:źródło
Musi to być jeden ze sposobów
if (typeof myObj.prop1 != "undefined") {...}
źródło
Wiem, że to stare pytanie, ale jestem zaskoczony, że wszystkie odpowiedzi zapewniają, że metoda istnieje i jest to funkcja, gdy PO chce tylko sprawdzić istnienie. Aby wiedzieć, że jest to funkcja (jak wielu twierdziło), możesz użyć:
Ale możesz również użyć jako warunku:
Lub nawet:
Dzieje się tak, ponieważ funkcja oblicza
true
iundefined
oblicza dofalse
. Więc jeśli wiesz, że jeśli członek istnieje, może to być tylko funkcja, możesz użyć:Lub w wyrażeniu:
źródło