Re[8]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 25.12.09 18:44
Оценка:
Здравствуйте, neFormal, Вы писали:

F>>>если this не трогать, то красивое решение найти имхо невозможно.. а super this выглядит костыльно..

CS>>А что лучше: this^ или this super ?

F>лучше, когда this — не ключевое слово..


То как это сделано в Python тоже не выход: метод класса объявляется с одной сигнатурой, а вызывается с другой.
Не есть хорошо. Я думаю что иметь this и для полноты this super это коцептуально правильнее.
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: Воронков Василий Россия  
Дата: 25.12.09 18:50
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&page&replies=8#post-5685

CS>и какие-то идеи появились. Может что-то еще?

Мне бы понравился вариант с обращением по имени, т.е. вместо super this.foo() было бы Outer.foo() Более того уровень вложенности на многословность конструкция не влияет.
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 25.12.09 19:43
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, c-smile, Вы писали:


CS>>Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&page&replies=8#post-5685

CS>>и какие-то идеи появились. Может что-то еще?

ВВ>Мне бы понравился вариант с обращением по имени, т.е. вместо super this.foo() было бы Outer.foo() Более того уровень вложенности на многословность конструкция не влияет.


Если бы такое обращение было всегда возможно то это было бы конечно же идеально.

Но

1) в JS/TS есть анонимные функции, соответственно твой вариант для них не работает.
2) в JS/TS функция есть объект. Т.е. на функцию можно повесить любой атрибут, в том числе другую функцию.

Т.е. вот это вот:

function Outer() 
{ 
  function Inner() { Outer.foo(); }  
}
Outer.foo = function() {  ... }


вполне себе рабочий код и так. Это я к тому что менять смысл выражания Outer.foo() чревато.
Re[3]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: Воронков Василий Россия  
Дата: 25.12.09 20:13
Оценка:
Здравствуйте, c-smile, Вы писали:

[Skipped]

CS>вполне себе рабочий код и так. Это я к тому что менять смысл выражания Outer.foo() чревато.


Да, действительно, не подумал об этом. Тогда можно подумать о том, чтобы просто ввести специальное скрытое поле super (без всякого super this), которое содержит ссылку на родительскую ф-цию. Так, чтобы в принципе было возможно обращение вида:

super.super.foo()

Учитывая, что многократная вложенность ф-ций явно не слишком часто ипользуемая фишка, решение должно быть достаточным. Да и выглядит несколько более привычно, чем super this.
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 25.12.09 22:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Да, действительно, не подумал об этом. Тогда можно подумать о том, чтобы просто ввести специальное скрытое поле super (без всякого super this), которое содержит ссылку на родительскую ф-цию. Так, чтобы в принципе было возможно обращение вида:


ВВ>super.super.foo()


В TIScript super это ключевое слово с тем же значением что и в Java — доступ к методам суперкласса:

class Foo: Bar
{
  function foo() 
  { 
    ...
    return super.foo(); // Bar.foo() call with this.
  }
}


поэтому и приходится извращаться.
Re[3]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: yatagarasu Беларусь  
Дата: 30.12.09 10:23
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>Для случая когда Inner объявлен внутри функции и там же вызывается всё действительно тривиально.

CS>Вот скажем более жизненный пример:

CS>
CS>// adding method sortContent() to the Element class:
CS>function Element.sortContent()
CS>{
CS>  function Comparator(e1,e2)
CS>  {
CS>    if( (this super).tag == "select" )
CS>       return e1.value < e2.value? -1:1; 
CS>    else
CS>       return e1.text < e2.text? -1:1; 
CS>  }
CS>  this.sort(Comparator);
CS>}
CS>


CS>пример несколько неоптимальный но тем не менее демонстрирует идею: inner функция в данном случае это callback передаваемый куда-то еще.


CS>Проблема: в inner функции доступны все переменные из outer scope за исключением this ибо вложенная функция маскирует его своим собственным this.

CS>Задача состоит в том чтобы придумать синтаксическую конструкцию доступа к scope[-1].this

На сколько помню можно как то так

// adding method sortContent() to the Element class:
function Element.sortContent()
{
  function Comparator(me)
  {
    var me = me;
    return function(e1,e2)
    {
      if( me.tag == "select" )
        return e1.value < e2.value? -1:1; 
      else
        return e1.text < e2.text? -1:1; 
    }
  }
  this.sort(Comparator(this));
}
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 04.01.10 23:15
Оценка:
Здравствуйте, yatagarasu, Вы писали:

Y>На сколько помню можно как то так


Y>
Y>// adding method sortContent() to the Element class:
Y>function Element.sortContent()
Y>{
Y>  function Comparator(me)
Y>  {
Y>    var me = me;
Y>    return function(e1,e2)
Y>    {
Y>      if( me.tag == "select" )
Y>        return e1.value < e2.value? -1:1; 
Y>      else
Y>        return e1.text < e2.text? -1:1; 
Y>    }
Y>  }
Y>  this.sort(Comparator(this));
Y>}
Y>


var me = me; у тебя явно лишний statement. Ну и сама function Comparator(me) там не нужна — лишняя сущность.

Т.е. то что ты хотел написать выглядит так:

function Element.sortContent()
{
    var me = this;
    function Comparator(e1,e2)
    {
      if( me.tag == "select" )
        return e1.value < e2.value? -1:1; 
      else
        return e1.text < e2.text? -1:1; 
    }
    this.sort(Comparator);
}


Вот этот вот var me = this; и является тем костылем использования которого хотелось бы избежать.
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: anonymous Россия http://denis.ibaev.name/
Дата: 25.01.10 09:55
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&amp;page&amp;replies=8#post-5685

CS>и какие-то идеи появились. Может что-то еще?

Насколько я понял, в языке есть пространства имён. Можно сделать такое служебное пространство:
super::this
super::super::this
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 26.01.10 06:48
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&amp;page&amp;replies=8#post-5685

CS>>и какие-то идеи появились. Может что-то еще?

A>Насколько я понял, в языке есть пространства имён. Можно сделать такое служебное пространство:

A>
A>super::this
A>super::super::this
A>


namespace есть но с дот-нотацией.
super.this как-то "неправильно" выглядит.

А '::' у меня это "образователь" анонимной функции.

var c = 0;
element.post(::c+=1);

есть эквивалент этого
var c = 0;
element.post(function(){c+=1});


arr.sort(:e1,e2:e1-e2);

arr.sort(function(e1,e2){return e1-e2});


Короче то что в Ruby делают |block-params|block-body.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.