javascript - Hur kontrollerar man om ett anonymt objekt har en metod?


Hur kan jag kontrollera om ett anonymt objekt som skapades på detta sätt:

var myObj = { 
    prop1: 'no',
    prop2: function () { return false; }
}

har faktiskt en prop2 definierad?

prop2 kommer alltid att definieras som en funktion, men för vissa objekt är det inte nödvändigt och kommer inte att definieras.

Jag försökte det som föreslogs här: Hur man avgör om ett Native JavaScript-objekt har en egenskap/metod? men jag tror inte att det fungerar för anonyma objekt.

Svar #1

typeof myObj.prop2 === 'function'; låter dig veta om funktionen är definierad.

if(typeof myObj.prop2 === 'function') {
    alert("It's a function");
} else if (typeof myObj.prop2 === 'undefined') {
    alert("It's undefined");
} else {
    alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2);
}

Svar #2

Du vill ha hasOwnProperty():

var myObj1 = { 
	prop1: 'no',
	prop2: function () { return false; }
}
var myObj2 = { 
	prop1: 'no'
}

console.log(myObj1.hasOwnProperty('prop2')); // returns true
console.log(myObj2.hasOwnProperty('prop2')); // returns false
	

Referenser: Mozilla, Microsoft, phrogz.net.

Svar #3

3 alternativ

  1. typeof myObj.prop2 === 'function' om egenskapsnamnet inte är dynamiskt/genererat
  2. myObj.hasOwnProperty('prop2') om egenskapsnamnet är dynamiskt, och kontrollera endast om det är en direkt egenskap (inte ner i prototypkedjan)
  3. 'prop2' i myObj om egenskapsnamnet är dynamiskt, och kontrollera ner längs prototypkedjan

Relaterade artiklar