Тема: Promise polyfill
Показать сообщение отдельно
  #5 (permalink)  
Старый 28.03.2014, 16:47
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от danik.js
По поводу полифилов. Ты зачем перезаписываешь свойства:
Object.keys = Object.keys || function()..
Что изменится от того, что keys станет enumerable? Ну и вообще я методы побыстрому навыдергивал в пример отсюда, там есть проверка.


Сообщение от nerv_
Сообщение от danik.js
Кстати, может кто пояснить, в каком стандарте писаны методы Array.slice и прочие?
предположу, что ни к каком. Это чтобы каждый раз из прототипа не брать, насколько я понимаю.
Array generic methods

В Aurora 29
Array.slice.toString()
"function slice() {
    [native code]
}"



Сообщение от nerv_
Сообщение от danik.js
Это вобще дикость какая-то:
Object(object) !== object
я за isObject(value)
хз Object(object) === object стандартная проверка, сто лет так делаю, до этого никто не удивлялся
http://kangax.github.io/es5-compat-table/
http://kangax.github.io/es5-compat-table/es6/
http://kangax.github.io/es5-compat-table/non-standard/
http://people.mozilla.org/~jorendorf...ototype-object
не нахожу здесь Object.isObject или чего-то подобного, в глобале создавать такую функцию не хочу, а с неймспейсом запись не намного короче будет. Мне больше нравится запись if (Object(arg).length), чем if (isObject(arg) && arg.length).
Object.is не подходит, потому что Object.is(null, null) → true. Поэтому не вижу особой необходимости создавать isObject для полифила, в библиотеке или фреймворке — без проблем.

Сообщение от nerv_
Object(this).constructor !== Promise
// ->
isPromise(object)
Здесь не просто this.constructor, потому что в strict режиме this может быть undefined.
Да isPromise добавлю, думаю ни один раз понадобится, там надо разобраться, что происходит, когда в дженерики promise передают. Или на this instanceof Promise заменю.

Сообщение от nerv_
ну и по возможности я бы запихнул функции
function nextResolve(data) {
function nextReject(error) {
function resolve(data) {
function reject(error) {

в прототип как приватные (чтобы не создавались каждый раз)
попробую, просто сначала кроме onFulfilled, onRejected и lastData еще куча переменных замыкалась (всякие lastError, состояния rejected и fulfilled, и др.), сохранять их все куда то не хотелось

Сообщение от nerv_
Еще я вспомнил, что у тебя была тема про асинхронность. Так вот setImmediate там бы вписалась очень хорошо)
setImmediate есть в polyfills.js, используется в Promise и реализован почти так же, как в той теме

Последний раз редактировалось Octane, 31.03.2014 в 03:32.
Ответить с цитированием