Javascript.RU

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

Прикреплённый контекст
Будет ли в js когда-нибудь такое:
class Foo {
  bar() {
    return this;
  }
}

let foo = new Foo;
let test = x => x();

test(foo.bar) == foo;

???
В стрелочных функциях же биндится текущий контекст, было бы здорово, если бы и методам класса экземпляр прикреплялся, не?
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2015, 18:17
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

"Мы к вам профессор вот по какому поводу." Расскажите народу что такое вы изобрели.
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2015, 18:36
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от kostyanet
Расскажите народу что такое вы изобрели.
Я ничего не изобрел. Я спрашиваю, не знает ли кто, войдет ли это в спецификацию ECMAScript 6? Или может в ECMAScript 7? Или для js это принципиально ненужная фича?
Если в синтаксисе ES5, то я вот о чём:
var obj = {
    someText: "some text",
    func: function () {
        return this.someText;
    }
};

var func = obj.func;

obj.func() == "some text";
func() == undefined;
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2015, 18:44
Интересующийся
Отправить личное сообщение для sexbot Посмотреть профиль Найти все сообщения от sexbot
 
Регистрация: 09.05.2015
Сообщений: 27

Эту забавную особенность JavaScript можно было бы назвать: "у вас this отклеился". По ходу ничего не изменится.

Ответить с цитированием
  #5 (permalink)  
Старый 01.06.2015, 23:40
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от Sweet
я вот о чём:
Детский сад какой-то
var obj=function(){
    var someText="someText"
    return{
     someText: someText,
     func: function () {
        return someText;
    }
  }
}()
 
var func = obj.func;
alert([
 obj.func(),
 func()
])


var obj={
    someText: "some text",
}

obj.func=function () {
   return this.someText
}.bind(obj)
 
var func = obj.func;
 
alert([
 obj.func(),
 func()
])

// ::: [ 'some text', 'some text' ]
// ::: [ 'some text', 'some text' ]

Последний раз редактировалось indeterm, 01.06.2015 в 23:54.
Ответить с цитированием
  #6 (permalink)  
Старый 01.06.2015, 23:44
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от sexbot
Эту забавную особенность JavaScript
Это не "забавная особенность", а неотъемлемое свойство всех ООП-языков, где есть настоящее ООП.
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2015, 00:11
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от Sweet
Будет ли в js когда-нибудь такое:
Кстати, это и так есть
Foo=function(name) {
  this.name=name
  this.bar=function(){return this}.bind(this)
}
 
foo = new Foo("foo");
test =function(x){return x()}
 
console.log(test(foo.bar))
alert(test(foo.bar).name)
// ::: { name: 'foo', bar: [Function] }
// ::: foo

Последний раз редактировалось indeterm, 02.06.2015 в 00:15.
Ответить с цитированием
  #8 (permalink)  
Старый 02.06.2015, 00:20
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от sexbot
назвать: "у вас this отклеился"
и да, кстати, неверная ассоциация. Он не может отклеиться, поскольку он ни к чему никогда не приклеен.
Ответить с цитированием
  #9 (permalink)  
Старый 02.06.2015, 00:28
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от indeterm
Детский сад какой-то
Вау, НИЧЁСИ! И так можно?! Если серьёзно, indeterm, зачем ты написал эту хуетуерунду? Это ж совсем не соответствует тому, о чём я говорю Я просто не хочу каждый раз писать .bind(context). Потому что это глупо.
Когда используешь js, постоянно используешь callback-и. И удобно ведь передавать функции—члены класса. Странно, что эту возможность игнорят.

Сообщение от indeterm
неотъемлемое свойство всех ООП-языков, где есть настоящее ООП.
Например, python - очень близок к тому, к чему идет js. И там всё ок (полностью соответствует изначальному примеру):
Код:
class Foo:
	def bar(self):
		return self

foo = Foo()
test = lambda x: x()

test(foo.bar) == foo  # тут всё ок
Ответить с цитированием
  #10 (permalink)  
Старый 02.06.2015, 00:33
Аспирант
Отправить личное сообщение для indeterm Посмотреть профиль Найти все сообщения от indeterm
 
Регистрация: 26.05.2015
Сообщений: 43

Сообщение от Sweet
Например, python - очень близок к тому
Пистон близок к говну. Если JS идет туда,мне очень жаль.
Сообщение от Sweet
Я просто не хочу каждый раз писать .bind(context)
Если бы ты понимал JS, тебе бы такое пришлось писать крайне редко. Подобное связывание, если оно наблюдается часто, явный признак быдлокода.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В callback функции теряется контекст. Как это обойти? xintrea AJAX и COMET 4 02.06.2013 11:40
proxy() и изменение переданного в контекст объекта lamo4ok jQuery 1 15.05.2013 16:52
не понимаю как задать правильный контекст loz Dojo toolkit 2 17.02.2011 18:36
[jQuery] [Обработка клика] Как не потерять текущий контекст внутри обработчика? xintrea Events/DOM/Window 1 10.02.2011 16:34
контекст вокруг выделенного слова в js Тима Элементы интерфейса 1 19.01.2011 08:28