Встроенный метод 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, время: 14:47. |