Hallo,
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function TestClass() {
this.className = 'TestClass';
this.doSomething = function(testParam) { alert('testParam: '+testParam); }
this.init = function() {
var methodRef = this.doSomething;
document.getElementById('testLink').onclick = function () { methodRef('foo'); }
}
}
var myTestObj = new TestClass();
</script>
</head>
<body onload="myTestObj.init();">
<a href="#" id="testLink">Test</a>
</body>
</html>Das funktioniert nicht.
this.doSomething ist in der click Funktion undefiniert.
Ja, da wird es ja auch nicht aufgerufen. Du hast gesehen, dass das Objekt myTestObj im scope window existiert? Damit existiert zum Zeitpunkt BODY.onload auch myTestObj.init() und das hinterlegt, durch die Zwischenspeicherung in methodRef, als onclick praktisch
document.getElementById('testLink2').onclick = function () { myTestObj.doSomething('foo'); }
Das Gleiche bekäme man mit:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function TestClass() {
this.className = 'TestClass';
this.doSomething = function(testParam) { alert('testParam: '+testParam); }
}
function init() {
document.getElementById('testLink2').onclick = function () { new TestClass().doSomething('foo'); }
}
</script>
</head>
<body onload="init();">
<a href="#" id="testLink2">Test2</a>
</body>
</html>
viele Grüße
Axel