Giter Club home page Giter Club logo

Comments (4)

Riim avatar Riim commented on July 19, 2024
  1. Нет проблем с контекстом когда ячейка используется как свойство:
// prop запуститься в контексте this и он (this) подставиться как контекст обработчика
this.prop('subscribe', function() {});

// subscribe запуститься в контексте prop, а он как контекст обработчику нафик не нужен,
// нужно каждый раз прокидывать контекст вторым параметром,
// это часто случайно забывается
this.prop.subscribe(function() {}, this);

Arrow-функции проблему не решают, так как обработчик почти всегда подставляется из экземпляра:

this.prop('subscribe', this._onPropChange);

Лежать на экземпляре он должен для возможности переопределения в дочерних классах.

  1. Всякие оптимизационные моменты, ячейка -- это функция, в неё свой прототип не подставишь, приходится переписывать на неё кучу методов, тут, во-первых, замедление от самого переписывания и довольно значительное, во-вторых, сотни-тысячи ячеек в приложении помноженные на десятки методов -- это десятки-сотни тысяч ссылок и как следствие большее потребление памяти, хотя единичная ссылка в js конечно очень легковесна.

Это решение принималось очень давно и там плюсов и минусов было довольно много, я сейчас только основные помню. Плюсы были больше технические, вроде тех, что выше, а минусы в основном из серии "не хочется пугать пользователя чем-то необычным". Ещё серьёзным минусом было то, что появление typescript-а уже тогда было предсказуемым и я считал, что будут проблемы с автодополнением в редакторе, но сегодняшний typescript без проблем позволяет это описать и получить нормальное автодополнение, как-то так вроде:

cellx(methodName: 'subscribe', listener: Function)
cellx(methodName: 'then', onFulfilled: Function, onRejected?: Function)

то есть вместо типа указывается значение и эти значения автодополняются с дальнейшей проверкой компилятором остальной сигнатуры вызова. В общем, этот минус сам собой отпал.

from cellx.

arvitaly avatar arvitaly commented on July 19, 2024

Автодополнения вроде нет в таком случае, есть только подсказка к сигнатуре (всплывающее окно, вместо подстановки). А лично меня смутил нолик, ну и аргументацию было интересно услышать.

А сделать ячейку не функцией, я так понимаю, не позволяет желание сохранить этот синтаксис? Т.е. можно было бы сделать и get, set методы.

var x = cellx();
x.set("new value");
x.get();

from cellx.

Riim avatar Riim commented on July 19, 2024

Автодополнения вроде нет в таком случае, есть только подсказка к сигнатуре (всплывающее окно, вместо подстановки)

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

А сделать ячейку не функцией

в соседнем ишъю как раз немного рассказал про устройство функции cellx:

вызов функции cellx создаёт экземпляр cellx.Cell (там сложнее, но для простоты можно и так объяснить) и возвращает функцию которая проксирует часть своих вызовов на его (cellx.Cell) методы

то есть можно использовать сам класс ячейки:

let x = new cellx.Cell(5);
x.get();
x.subscribe(function() {});

from cellx.

arvitaly avatar arvitaly commented on July 19, 2024

Ага, ну тогда вопрос закрыт, спасибо.

from cellx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.