In der Vergangenheit haben Sie möglicherweise selbst setzt.
Hier ist ein einfaches Beispiel:
Die Codekopie lautet wie folgt:
var myobj = {
Spezialfunktion: function () {
},
Another specialfunction: function () {
},
getaSyncdata: function (cb) {
CB ();
},
rendern: function () {
var das = dies;
this.getaSyncData (function () {
that.specialfunction ();
that.anotherspecialfunction ();
});
}
};
myobj.render ();
In diesem Beispiel, um den MyOBJ -Kontext beizubehalten, ist eine Variable, die = dies ist festgelegt, die funktioniert, aber nicht ordentlich aussieht, ohne Funktion zu verwenden.Prototype.bind ():
Die Codekopie lautet wie folgt:
rendern: function () {
this.getaSyncData (function () {
this.specialfunction ();
this.anotherspecialfunction ();
} .bind (this));
}
Wenn Sie .bind () aufrufen, wird einfach eine neue Funktion erstellt und diese an diese Funktion übergeben. Der Code, der .Bind () implementiert, ist ungefähr so:
Kopieren Sie den Code wie folgt: function.prototype.bind = function (Scope) {
var fn = this;
return function () {
return fn.apply (scope);
};
}
Hier ist ein einfaches Beispiel für die Verwendung von Funktion.Prototype.bind ():
Die Codekopie lautet wie folgt:
var foo = {
x: 3
};
var bar = function () {
console.log (this.x);
};
bar (); // undefiniert
var bandfunc = bar.bind (foo);
boundfunc (); // 3
Ist es nicht sehr nützlich? Leider unterstützen IE -Browser unter IE8 und unten keine Funktion.Prototype.bind (). Zu den unterstützten Browsern gehören Chrome 7+, Firefox 4.0+, dh 9+, Opera 11.60+, Safari 5.1.4+. Obwohl der IE 8/7/6 und andere Browser dies nicht unterstützen, schrieb die Mozilla -Entwicklungsgruppe eine Funktion mit ähnlichen Funktionen für die alte Version des IE -Browsers mit dem Code wie folgt:
Die Codekopie lautet wie folgt:
if (! function.prototype.bind) {
Function.prototype.bind = function (othis) {
if (typeof this! == "Funktion") {
// Die interne iscallable Funktion ecmascript 5 am nächsten möglich ist
Neue TypeError werfen ("function.prototype.bind - Was versucht, gebunden zu werden, ist nicht aufrufbar");
}
var aargs = array.prototype.slice.call (Argumente, 1),
ftobind = this,,
fnop = function () {},
fbound = function () {
return ftobind.apply (diese Instanz von fnop && othis
? Das
: othis,
aargs.concat (Array.Prototype.slice.call (Argumente)));
};
fnop.Prototype = this.Prototype;
fBound.Prototype = new fnop ();
FBOund zurückgeben;
};
}