w3schools react metodo event javascript internet-explorer-8 cross-browser bind backwards-compatibility

react - Cómo manejar la falta de método Object.bind() de JavaScript en IE 8



metodo bind java (4)

Estoy escribiendo un poco de JavaScript que usa el método Object.bind .

funcabc = function(x, y, z){ this.myx = x; this.playUB = function(w) { if ( this.myx === null ) { // do blah blah return; } // do other stuff }; this.play = this.playUB.bind(this); };

Como desarrollo en WinXP con Firefox y, a veces, pruebo en Win7 con IE 9 o 10, no me di cuenta ni presté atención al hecho de que IE8 y las versiones posteriores no son compatibles con bind .

Esta secuencia de comandos en particular no utiliza el lienzo, por lo que estoy un poco indeciso para descartar todos los usuarios de IE 8.

¿Hay una solución estándar?

Me estoy poniendo bastante bien en JavaScript, pero todavía soy un poco novato. Entonces, perdónenme si la solución es totalmente obvia.


El constructor de funciones es la forma antigua de hacer esto:

var foo = function(x,y,z){ return Function("x,y,z","return Math.max.call(this, x, y, z)")(x,y,z) } var bar = function(x,y,z){ return Function("x,y,z","return Math.min.call(this, x, y, z)")(x,y,z) } console.log(foo(1,2,3) ); console.log(bar(3,2,1) );

Referencias


Function.prototype.bind no es compatible con Internet Explorer 8 y versiones posteriores. Tabla de compatibilidad aquí: http://kangax.github.io/es5-compat-table/

Mozilla Developer Network brinda esta alternativa para navegadores más antiguos que no implementan .bind () de forma nativa:

if (!Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { // closest thing possible to the ECMAScript 5 internal IsCallable function throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function () {}, fBound = function () { return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; }


Hay una buena secuencia de comandos de compatibilidad en esta página: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

Simplemente cópielo y péguelo en su script.

EDITAR: colocando el script a continuación para mayor claridad.

if (!Function.prototype.bind) { Function.prototype.bind = function(oThis) { if (typeof this !== ''function'') { // closest thing possible to the ECMAScript 5 // internal IsCallable function throw new TypeError(''Function.prototype.bind - what is trying to be bound is not callable''); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function() {}, fBound = function() { return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; }