Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прикреплённый контекст (https://javascript.ru/forum/misc/56151-prikrepljonnyjj-kontekst.html)

Sweet 01.06.2015 17:53

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

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

test(foo.bar) == foo;

???
В стрелочных функциях же биндится текущий контекст, было бы здорово, если бы и методам класса экземпляр прикреплялся, не?

kostyanet 01.06.2015 18:17

"Мы к вам профессор вот по какому поводу." Расскажите народу что такое вы изобрели.

Sweet 01.06.2015 18:36

Цитата:

Сообщение от 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;

sexbot 01.06.2015 18:44

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


indeterm 01.06.2015 23:40

Цитата:

Сообщение от 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:44

Цитата:

Сообщение от sexbot
Эту забавную особенность JavaScript

Это не "забавная особенность", а неотъемлемое свойство всех ООП-языков, где есть настоящее ООП.

indeterm 02.06.2015 00:11

Цитата:

Сообщение от 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:20

Цитата:

Сообщение от sexbot
назвать: "у вас this отклеился"

и да, кстати, неверная ассоциация. Он не может отклеиться, поскольку он ни к чему никогда не приклеен.

Sweet 02.06.2015 00:28

Цитата:

Сообщение от indeterm
Детский сад какой-то

Вау, НИЧЁСИ! И так можно?!:lol: Если серьёзно, 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  # тут всё ок


indeterm 02.06.2015 00:33

Цитата:

Сообщение от Sweet
Например, python - очень близок к тому

Пистон близок к говну. Если JS идет туда,мне очень жаль.
Цитата:

Сообщение от Sweet
Я просто не хочу каждый раз писать .bind(context)

Если бы ты понимал JS, тебе бы такое пришлось писать крайне редко. Подобное связывание, если оно наблюдается часто, явный признак быдлокода.


Часовой пояс GMT +3, время: 18:27.