Здравствуйте, neFormal, Вы писали:
F>>>если this не трогать, то красивое решение найти имхо невозможно.. а super this выглядит костыльно.. CS>>А что лучше: this^ или this super ?
F>лучше, когда this — не ключевое слово..
То как это сделано в Python тоже не выход: метод класса объявляется с одной сигнатурой, а вызывается с другой.
Не есть хорошо. Я думаю что иметь this и для полноты this super это коцептуально правильнее.
Re: [JavaScript alike] Нужны идеи про 'super this' синтаксис
Мне бы понравился вариант с обращением по имени, т.е. вместо super this.foo() было бы Outer.foo() Более того уровень вложенности на многословность конструкция не влияет.
Re[2]: [JavaScript alike] Нужны идеи про 'super this' синтак
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, 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' синтак
[Skipped]
CS>вполне себе рабочий код и так. Это я к тому что менять смысл выражания Outer.foo() чревато.
Да, действительно, не подумал об этом. Тогда можно подумать о том, чтобы просто ввести специальное скрытое поле super (без всякого super this), которое содержит ссылку на родительскую ф-цию. Так, чтобы в принципе было возможно обращение вида:
super.super.foo()
Учитывая, что многократная вложенность ф-ций явно не слишком часто ипользуемая фишка, решение должно быть достаточным. Да и выглядит несколько более привычно, чем super this.
Re[4]: [JavaScript alike] Нужны идеи про 'super this' синтак
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Да, действительно, не подумал об этом. Тогда можно подумать о том, чтобы просто ввести специальное скрытое поле 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' синтак
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' синтак
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Вот тут вот я вопрошал про то же самое: http://terrainformatica.com/forums/topic.php?id=1184&page&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.