webForumDet fria alternativet

method support detection

JavaScript

4 svar · 1 589 visningar · startad av standard sparty

Medlem sedan sep. 201041 inlägg
Frågan#1

Hallå

Nu bråkar jag med hasAttribute igen! Följande:

if(window.hasAttribute){
	alert('hasAttribute stöds');
}
else{
	alert('hasAttribute stöds inte');
}

if(window.setInterval){
	alert('setInterval stöds');
}
else{
	alert('setInterval stöds inte');
}

ger:

”hasAttribute stöds inte”
”setInterval stöds”

även i de browsers som stöder hasAttribute. Jag förstår verkligen inte varför. Båda är methods och borde kunna testas på detta sätt, inte sant?

Medlem sedan apr. 20003 174 inlägg
#2

Syntax är: element.hasAttribute(attName); så du måste skicka med attributet in oxå, ex.

var d = document.getElementById("div1"); 
if(d.hasAttribute("align")){ 
  d.setAttribute("align", "center"); 
}
Medlem sedan juli 2003555 inlägg
#3

Är du säker på att objektet window stödjer den metoden? Alla objekt stödjer inte alla metoder. Om jag skapar en klass A med en metod X så förväntar jag mig inte att en instans av klass B också har metod X

Medlem sedan aug. 20039 340 inlägg
#4

Palle: Du missuppfattar frågan, medan onkelborg fattar vinken.

Det sparty vill göra är att kolla om metoden stöds. Och de två exemplen med hasAttribute och setInterval är vitt skilda.

window-objektet är ett speciellt objekt som symboliserar det globala scopet i fönstret. Om window.setInterval är definierat, betyder det att man kan anropa setInterval från valfri plats, så länge det inte också finns en variabel i det lokala scopet som också kalllas setInterval. Om det finns en lokal variabel med samma namn, kan man skriva window.setInterval för att uttryckligen komma åt den setInterval som finns i det globala scopet. Du kan även själv uttryckligen definiera globala variabler med window.myVar = 42;

hasAttribute å andra sidan är en metod som definierad på enskilda DOM-objekt. window är som beskrivet ovan inte ett DOM-objekt, utan en symbol för det globala scopet. Vill du testa om hasAttribute stöds, måste du plocka fram ett valfritt DOM-objekt. T ex if(document.firstChild.hasAttribute)

Medlem sedan sep. 201041 inlägg
#5

Helt riktigt nitro2k01

setInterval blandade jag bara in för att visa varför funkar det ena men inte det andra liksom. Jag antog att det var två likvärdiga ”grejor” i javascript. Jag kan bara konstatera hur jag totalt saknar grunderna i javascript med koncept som objects, variablar(!), methods och functions etc.

Men, lite klokare blev jag i alla fall.

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)