[JavaScript alike] Нужны идеи про 'super this' синтаксис.
От: c-smile Канада http://terrainformatica.com
Дата: 18.12.09 01:33
Оценка:
Скажем есть такая функция:

function Outer()
{
  var one = this.foo();
  function Inner()
  {
    var another = this.foo(); // this?
  }
  Inner(); // <<< problem here, 'this' for Inner call is not set
}


вернее их две: Outer и Inner.

Я думаю проблема очевидна.

Стандартное решение такой проблемы состоит в заведении служебной переменной:

function Outer()
{
  var me = this;
  var one = this.foo();
  function Inner()
  {
    var another = me.foo(); // (super this).foo() call
  }
  Inner(); // всё хорошо
}


Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так

function Outer()
{
  var one = this.foo();
  function Inner()
  {
    var another = super this.foo(); // 'super this' это один токен на самом деле.
  }
  Inner(); // всё хорошо
}


Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&amp;page&amp;replies=8#post-5685
и какие-то идеи появились. Может что-то еще?
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: neFormal Россия  
Дата: 18.12.09 05:02
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Хочется этого лишнего объявления избежать путем введения "super this" конструкции.


это чтобы замыкания не делать?. или делать их явно?.
а что будет, если в Inner будет YetAnotherInner?. как там будет выглядеть this?.

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


не нравится super this.. натянуто выглядит..
если делать явно, то я бы предпочёл либо явно передавать в параметры этот this, либо в Inner получать переменную из области видимости этажом выше, например: global this.
...coding for chaos...
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 18.12.09 19:15
Оценка:
Здравствуйте, neFormal, Вы писали:

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


CS>>Хочется этого лишнего объявления избежать путем введения "super this" конструкции.


F>это чтобы замыкания не делать?. или делать их явно?.

F>а что будет, если в Inner будет YetAnotherInner?. как там будет выглядеть this?.

Замыкания делаются в обоих случаях:

1)
function Outer()
{
  var one = this.foo();
  var me = this;
  function Inner() { var another = me.foo(); }
  Inner(); 
}


2)

function Outer()
{
  var one = this.foo();
  function Inner() { var another = (super this).foo(); }
  Inner();
}


Во втором случае не требуется искуственная переменная me.

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


F>не нравится super this.. натянуто выглядит..

F>если делать явно, то я бы предпочёл либо явно передавать в параметры этот this, либо в Inner получать переменную из области видимости этажом выше, например: global this.

Вот тут в параметрах this уже не передашь:

`class MyComponent
{
function init()
{
var one = this.foo();
function handler()
{
(super this).doSomething(); // здесь super this это перменная this@init
}
this.select("button#b").onClick = handler;
}
function doSomething() {...}
}`
Re[3]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: neFormal Россия  
Дата: 19.12.09 17:42
Оценка:
Здравствуйте, c-smile, Вы писали:

F>>а что будет, если в Inner будет YetAnotherInner?. как там будет выглядеть this?.


так каков будет синтаксис при нескольких вложенных функциях?.

CS>Замыкания делаются в обоих случаях:


я так понимаю, что тогда проблема в реализации this, да?. ведь если бы он передавался явно (как в python) или неявно, то механизм замыканий отработал нормально..
может лучше его всё таки передавать?.
...coding for chaos...
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 20.12.09 00:09
Оценка:
Здравствуйте, neFormal, Вы писали:

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


F>>>а что будет, если в Inner будет YetAnotherInner?. как там будет выглядеть this?.


F>так каков будет синтаксис при нескольких вложенных функциях?.



namespace Z
{ 
  function A()
  {
    var this_a = this;
    function B()  
    {
      var this_b = this;    
      function C()
      {
        assert this_b == this super;  
        assert this_a == this super super;
      }
      C();
    }
    B();
  }
}

Z.A();


CS>>Замыкания делаются в обоих случаях:


F>я так понимаю, что тогда проблема в реализации this, да?. ведь если бы он передавался явно (как в python) или неявно, то механизм замыканий отработал нормально..


F>может лучше его всё таки передавать?.


В JavaScript (и в TIScript) this достаточно строго определен.
this получает значение объекта слева от точки при вызове метода.
Если функция вызывается не как метод то this это namespace в котором функция объявлена.

Т.е. механизм передачи this определен и менять это все смысла нет.
Re[5]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: cgibin  
Дата: 20.12.09 02:20
Оценка:
Здравствуйте, c-smile, Вы писали:

Мне не очень нравится идея с пробелом внутри keyword'a. Я, например, буду рефлекторно эту конструкцию в () оборачивать. Тем более, не совсем понятно, 'this super super' это отдельный keyword или какая-то суперпозиция. Вариант с this1, this2 в этом плане мне нравится больше, хотя и выглядит коряво. На мой взгляд, самый частый use case этой фичи будет спросить что-то с предыдущего уровня, возможно, это стоит как-то обыграть. Ну и до кучи слов накидаю — outside, above, that, external, out, begone, off
Re[6]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 20.12.09 04:14
Оценка:
Здравствуйте, cgibin, Вы писали:

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


C>Мне не очень нравится идея с пробелом внутри keyword'a. Я, например, буду рефлекторно эту конструкцию в () оборачивать. Тем более, не совсем понятно, 'this super super' это отдельный keyword или какая-то суперпозиция. Вариант с this1, this2 в этом плане мне нравится больше, хотя и выглядит коряво. На мой взгляд, самый частый use case этой фичи будет спросить что-то с предыдущего уровня, возможно, это стоит как-то обыграть. Ну и до кучи слов накидаю — outside, above, that, external, out, begone, off


На самом деле у меня this это такой оператор сделанный по аналогии с typeof :

typeof operand

По аналогии c этим:

this [ function | super+ ]

По поводу скобок, как правило народ пишет typeof со скобками, типа typeof(somevar), хотя скобки там не нужны.
Ну т.е. и пиши себе (this super) если так комфортно.
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: Uzzy Россия  
Дата: 21.12.09 09:54
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Может что-то еще?


В JavaScript можно сделать такое:


    <script type="text/javascript">
        function Outer() {
            foo = function() {
                alert("Wow!");
            }
            function Inner() {
                var another = this.foo();
            }
            Inner.prototype = this;
            Inner();
        }
    
    </script>
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.12.09 12:45
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Стандартное решение такой проблемы состоит в заведении служебной переменной:


Поскольку в JavaScript this каждый раз определятся динамически, исходя из контекста, замыкание будет единственно правильным способом.

CS>Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так


Если изменится контекст вызова, например, мы вызовем функцию через setTimeout(), то результат super this будет не тот, что мы ожидали.
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 21.12.09 19:17
Оценка:
Здравствуйте, Uzzy, Вы писали:

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


CS>>Может что-то еще?


U>В JavaScript можно сделать такое:


U>
U>    <script type="text/javascript">
U>        function Outer() {
U>            foo = function() {
U>                alert("Wow!");
U>            }
U>            function Inner() {
U>                var another = this.foo();
U>            }
U>            Inner.prototype = this;
U>            Inner();
U>        }
    
U>    </script>
U>


В JavaScript лучше такое не делать. У тебя foo это глобальная переменная со всеми вытекающими.
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 21.12.09 19:39
Оценка:
Здравствуйте, anonymous, Вы писали:

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


CS>>Стандартное решение такой проблемы состоит в заведении служебной переменной:


A>Поскольку в JavaScript this каждый раз определятся динамически, исходя из контекста, замыкание будет единственно правильным способом.


CS>>Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так


A>Если изменится контекст вызова, например, мы вызовем функцию через setTimeout(), то результат super this будет не тот, что мы ожидали.


Так. Понятно. Каша в понятиях.

Еще раз:

'this' это такая локальная переменная. Такая же как и все остальные. Просто обявлена by default.

Можно считать что все локальные переменные внутри функции находятся в неком массиве __local_vars[] формируемым компилятором следующим образом:

__local_vars[0] <- 'this'
__local_vars[1] <- function argument #1
__local_vars[2] <- function argument #2
...
__local_vars[N] <- function argument #N
__local_vars[N+1] <- local variable #1
__local_vars[N+2] <- local variable #2
...


Таким образом:

Использование вспомогательной перменной 'me':

function Outer()
{
  var me = this; // __local_vars[1] = __local_vars[0]
  function Inner() 
  { 
     me.foo();   // __scope[-1].__local_vars[1].foo()
  }
  Inner(); 
}


Использование 'this super' напрямую:

function Outer()
{
  function Inner() 
  { 
    (super this).foo(); // __scope[-1].__local_vars[0].foo()
  }
  Inner();
}


Т.е. эти два варианта тождественны. Второй более оптимален — меньше размер в памяти и быстрее работает — нет лишнего присваивания и меньше мусора собирать.
Re[3]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: yuriylsh  
Дата: 22.12.09 02:46
Оценка: +1
Здравствуйте, c-smile, Вы писали:
CS>Использование вспомогательной перменной 'me':

CS>
CS>function Outer()
CS>{
CS>  var me = this; // __local_vars[1] = __local_vars[0]
CS>  function Inner() 
CS>  { 
CS>     me.foo();   // __scope[-1].__local_vars[1].foo()
CS>  }
CS>  Inner(); 
CS>}
CS>


CS>Использование 'this super' напрямую:


CS>
CS>function Outer()
CS>{
CS>  function Inner() 
CS>  { 
CS>    (super this).foo(); // __scope[-1].__local_vars[0].foo()
CS>  }
CS>  Inner();
CS>}
CS>


CS>Т.е. эти два варианта тождественны. Второй более оптимален — меньше размер в памяти и быстрее работает — нет лишнего присваивания и меньше мусора собирать.


Что плохо в обоих случаях это то, что замыкание вводит дополнительный scope для Inner, т.е. все равно неоптимально (конечно, если Inner и так замкнемся на что-либо другое в Outer, то scope и так приедет). Вот если бы (super this) автоматом становился локальной переменной...
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 22.12.09 05:13
Оценка:
Здравствуйте, yuriylsh, Вы писали:

Y>Что плохо в обоих случаях это то, что замыкание вводит дополнительный scope для Inner, т.е. все равно неоптимально (конечно, если Inner и так замкнемся на что-либо другое в Outer, то scope и так приедет). Вот если бы (super this) автоматом становился локальной переменной...


Согласен. Технически это возможно ибо this и this super есть immutable variables т.е. можно сделать копию.
Вопрос в том сколько будет стоить инфраструктура такого дела в parse time.
Re[3]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: anonymous Россия http://denis.ibaev.name/
Дата: 22.12.09 11:39
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>>>Стандартное решение такой проблемы состоит в заведении служебной переменной:

A>>Поскольку в JavaScript this каждый раз определятся динамически, исходя из контекста, замыкание будет единственно правильным способом.
CS>>>Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так
A>>Если изменится контекст вызова, например, мы вызовем функцию через setTimeout(), то результат super this будет не тот, что мы ожидали.
CS>Так. Понятно. Каша в понятиях.

Соболезную.

CS>
CS>function Outer()
CS>{
CS>  function Inner() 
CS>  { 
CS>    this.foo();
CS>  }
CS>  Inner.apply(this);
CS>}
CS>
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 22.12.09 17:45
Оценка:
Здравствуйте, anonymous, Вы писали:

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


CS>>>>Стандартное решение такой проблемы состоит в заведении служебной переменной:

A>>>Поскольку в JavaScript this каждый раз определятся динамически, исходя из контекста, замыкание будет единственно правильным способом.
CS>>>>Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так
A>>>Если изменится контекст вызова, например, мы вызовем функцию через setTimeout(), то результат super this будет не тот, что мы ожидали.
CS>>Так. Понятно. Каша в понятиях.

A>Соболезную.


A>
A>function Outer()
A>{
A>  function Inner() 
A>  { 
A>    this.foo();
A>  }
A>  Inner.apply(this);
A>}
A>


C apply внутри функции проблем нет. Проблема с dlegate case:


class Tape : Behavior
{
  function attached() // behavior ctor, 'this' is the DOM element this behavior is attached to
  {
    function clickHandler()
    {
      (super this).onButtonClicked(this);
    }
    self.$(button#some).onClick = clickHandler;
  }
  function onButtonClicked(theButton) { ... }
}


событие .onClick на кнопке активирует функцию на onClick property элемента. 'this' в даном случае будет самой кнопкой,
а не instanceof Tape. Т.е. уже никаго apply не организовать.
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
От: yatagarasu Беларусь  
Дата: 23.12.09 09:20
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>
CS>function Outer()
CS>{
CS>  var me = this;
CS>  var one = this.foo();
CS>  function Inner()
CS>  {
CS>    var another = me.foo(); // (super this).foo() call
CS>  }
CS>  Inner(); // всё хорошо
CS>}
CS>


CS>Хочется этого лишнего объявления избежать путем введения "super this" конструкции. Т.е. можно тогда писать так

могу ошибаться, но какая разница?

function Outer()
{
  var one = this.foo();
  function Inner(me)
  {
    var another = me.foo(); // (super this).foo() call
  }
  Inner(this); // всё хорошо
}
Re[5]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: neFormal Россия  
Дата: 23.12.09 10:37
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>C apply внутри функции проблем нет. Проблема с dlegate case:

CS>
CS>class Tape : Behavior
CS>{
CS>  function attached() // behavior ctor, 'this' is the DOM element this behavior is attached to
CS>  {
CS>    function clickHandler()
CS>    {
CS>      (super this).onButtonClicked(this);
CS>    }
CS>    self.$(button#some).onClick = clickHandler;
CS>  }
CS>  function onButtonClicked(theButton) { ... }
CS>}
CS>

CS>событие .onClick на кнопке активирует функцию на onClick property элемента. 'this' в даном случае будет самой кнопкой,
CS>а не instanceof Tape. Т.е. уже никаго apply не организовать.

проще в методах this делать локальной переменной и замыкаться на него.. фактически, это заведение служебной переменной me, но скрытое..
если this не трогать, то красивое решение найти имхо невозможно.. а super this выглядит костыльно..
...coding for chaos...
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 23.12.09 19:24
Оценка:
Здравствуйте, yatagarasu, Вы писали:

Y>могу ошибаться, но какая разница?


Y>
Y>function Outer()
Y>{
Y>  var one = this.foo();
Y>  function Inner(me)
Y>  {
Y>    var another = me.foo(); // (super this).foo() call
Y>  }
Y>  Inner(this); // всё хорошо
Y>}
Y>


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

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


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

Проблема: в inner функции доступны все переменные из outer scope за исключением this ибо вложенная функция маскирует его своим собственным this.
Задача состоит в том чтобы придумать синтаксическую конструкцию доступа к scope[-1].this
Re[6]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: c-smile Канада http://terrainformatica.com
Дата: 23.12.09 19:35
Оценка:
Здравствуйте, neFormal, Вы писали:

F>проще в методах this делать локальной переменной и замыкаться на него.. фактически, это заведение служебной переменной me, но скрытое..


Ну дык this и есть локальная переменная (immutable variable to be precise).

Фактически происходит следующее

function Outer()
{
  const this = <...get 'this' value from call stack...>; // declaration happens under the hood

  function Inner()
  {
    const this = <...get 'this' value from call stack...>; // declaration happens under the hood

    how to get that 'outer this' here?
  }
}


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


А что лучше:

this^ или this super

?
Re[7]: [JavaScript alike] Нужны идеи про 'super this' синтак
От: neFormal Россия  
Дата: 25.12.09 08:35
Оценка:
Здравствуйте, c-smile, Вы писали:

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

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

лучше, когда this — не ключевое слово..
...coding for chaos...
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&amp;page&amp;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&amp;page&amp;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...
Пока на собственное сообщение не было ответов, его можно удалить.