Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2016, 16:17
Интересующийся
Отправить личное сообщение для uanr81 Посмотреть профиль Найти все сообщения от uanr81
 
Регистрация: 14.12.2015
Сообщений: 18

Встроенный метод 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;
}
Спасибо. Буду рад разъяснению.

Последний раз редактировалось uanr81, 08.01.2016 в 16:44. Причина: Забыл контекст вызова передать
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2016, 16:42
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

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();
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2016, 16:46
Интересующийся
Отправить личное сообщение для uanr81 Посмотреть профиль Найти все сообщения от uanr81
 
Регистрация: 14.12.2015
Сообщений: 18

Написал так, но не уверен в верности
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();

Последний раз редактировалось uanr81, 09.01.2016 в 13:29. Причина: не использовал var
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2016, 16:55
Интересующийся
Отправить личное сообщение для uanr81 Посмотреть профиль Найти все сообщения от uanr81
 
Регистрация: 14.12.2015
Сообщений: 18

По ходу недопонимаю сущность This. С apply и call не в виде аргументов при вызове, как то в голову не вместилось. Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод children sash003 Events/DOM/Window 8 09.07.2015 22:31
метод bind или обычное замыкание? skrudjmakdak Общие вопросы Javascript 11 28.08.2014 13:00
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Общие вопросы Javascript 1 13.04.2011 22:09
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Internet Explorer 1 13.04.2011 21:59
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29