Function.prototype.bind wrappt ein Funktionsobjekt und sorgt dafür, dass sie immer im Kontext des angegebenen Objektes ausgeführt wird. Das ist nicht standardmäßig der Fall,
Hier aber schon. Er verwendet prototype und erzeugt eine Class-Objekt mit dieser Methode.
Was ich meinte, war:
<!DOCTYPE html>
<html><head>
<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"></script>
<script>
[code lang=javascript]var PseudoClass = Class.create({
className : "PseudoClass",
method : function () {
alert(this + '\n' + typeof this + '\n' + (this instanceof PseudoClass) + '\n' + this.className);
}
});
var instance = new PseudoClass;
instance.method.delay(1); // Geht nicht
instance.method.bind(instance).delay(1); // Geht
</script>
</head><body></body></html>[/code]
Prototype bindet die Methode hier nicht standardmäßig an die Instanz. instance.method ist exakt das Funktionsobjekt, was man Class.create im Object-Literal übergeben hat. Es wird nicht automatisch in eine Closure gewrappt.
Vielmehr bindet delay this an die Methode selbst.
Mathias