Встроенный метод bind
Здравствуйте. У меня возникли сложности при эмуляции встроенного метода bind. Если переписать так как в учебнике
bind(func, context /*, afgum*/) Здесь сложностей не возникает, можно сослаться в функции обвёртке на идентификатор из замыкания func.apply(context, sbor_arg); у нас в аргументах есть ссылка на объект функции "func". Я думал не сложно для меня будет как бы написать встроенный метод, с его именно вызовом func.bind(context). Писал так: function bbind(cont/*, afgum*/){ _this = this; karing = [].slice.call(arguments, 1); function a(){ arg_obvertki = [].slice.call(arguments); sbor = karing.concat(arg_obvertki); return func.apply(cont, sbor);/*Как здесь можно сослаться на функцию в контексте которой вызван метод, в данном коде как то переписать func*/ } return a; }Спасибо. Буду рад разъяснению. |
Function.prototype.bbind = function(context) { var _this = this, args = [].slice.call(arguments, 1); return function() { _this.apply( context, args.concat( [].slice.call(arguments) ) ); }; }; var obj = { prop: 'Bla-bla' }; function foo() { alert(this.prop); } var a = foo.bbind(obj); a(); |
Написал так, но не уверен в верности
Function.prototype.bbind = function (cont/*, afgum*/){ var _this = this; var karing = [].slice.call(arguments, 1); function a(){ var arg_obvertki = [].slice.call(arguments); var sbor = karing.concat(arg_obvertki); return _this.apply(cont, sbor);} return a; }; function f() { alert( this ); } var user = { g: f.bbind("Hello") } user.g(); |
По ходу недопонимаю сущность This. С apply и call не в виде аргументов при вызове, как то в голову не вместилось. Спасибо
|
Часовой пояс GMT +3, время: 07:48. |