01.03.2015, 22:34
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
nerv, для написания итераторов удобно использовать генераторы.
function *makeIterator(array){
var nextIndex = 0;
while (nextIndex < array.length) {
yield array[nextIndex++];
}
}
var iterator = makeIterator([1,2,3]);
for (var key of iterator) {
alert(key);
}
А ещё можно так:
for (var key of (el for (el of [1,2,3]))) {
alert(key);
}
Последний раз редактировалось kobezzza, 01.03.2015 в 22:44.
|
|
01.03.2015, 22:51
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
kobezzza, ага, спасибо, я знаю. Только без regeneratorRuntime в ES5 работать не будет.
Кстати, эта поделка от фейсбука https://github.com/facebook/regenerator
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
01.03.2015, 22:56
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Угу, она юзается в Babel.
|
|
07.03.2015, 21:38
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Наткнулся тут на одну фичу, здесь, вроде, еще не было:
let room = new Room();
let character = new Character({room});
assert.equal(character.room, room);
room.destroy();
assert.isNull(character.room);
assert.isNull(room); //!!!
И даже кодить ничего не надо:
const revoke = Symbol();
class Model {
constructor() {
let {
proxy,
revoke: revokeHandler
} = Proxy.revocable(this, {});
this[revoke] = revokeHandler;
return proxy;
}
destroy() {
this[revoke]();
}
}
class Character extends Model {
constructor(room) {
super();
Object.assign(this, {
room
});
}
}
class Room extends Model {}
https://people.mozilla.org/~jorendor...roxy.revocable
|
|
09.03.2015, 21:02
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Изобретаем Deferred по новой
class Deferred {
constructor(generator) {
this.promise = new Promise((resolve, reject) => {
Object.assign(this, {resolve, reject});
});
generator.next();
let next = value => {
let result = generator.next(value);
if (!result.done) {
value = result.value;
if (value && value.next) {
new Deferred(value).done(next).fail(this.reject);
} else {
next(value);
}
}
};
next(this);
}
done(onFulfilled) {
this.promise.then(onFulfilled);
return this;
}
fail(onRejected) {
this.promise.catch(onRejected);
return this;
}
}
function * getFoo() {
let deferred = yield;
setTimeout(function() {
deferred.resolve('foo');
}, 100);
}
function * getBar() {
let deferred = yield;
let foo = yield getFoo();
setTimeout(function() {
deferred.resolve(foo + 'bar');
}, 100);
}
new Deferred(getBar()).done(function(value) {
console.log(value);
});
// в консоль выведется "foobar"
Последний раз редактировалось Octane, 09.03.2015 в 21:06.
|
|
12.03.2015, 18:55
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Octane, поясняй пож. я, например, нифига не понял
Tagged template strings. Вызываем функции без скобок?
alert`1`
тот же код, пропущенный через babel:
"use strict";
var _taggedTemplateLiteral = function (strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); };
alert(_taggedTemplateLiteral(["1"], ["1"]));
|
|
12.03.2015, 19:53
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Octane, поясняй пож. я, например, нифига не понял
Tagged template strings. Вызываем функции без скобок?
|
Ну, это решение следующей проблемы:
var myStr = `
Hello ${name}!
I'm glad to see you.
`;
Если все оставить как есть, то в нашей строке будут переводы строк и начальные пробелы, а зачастую нам это совсем не нужно. В некоторых языках существуют разные литералы строк, которые могут по разному обрабатывать такие кейзы, но в JS решили сделать самый универсальный способ: позволить пользователю самому определять "тег" для строки, где обрабаывать нужную логику (экранирование, переводы строк и т.д.)
var myStr = n2br`
Hello ${name}!
I'm glad to see you.
`;
Скобки тут бы очень мешались, поэтому их нет, всё просто
К сожалению тег может быть только один
|
|
12.03.2015, 19:57
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
К моему удивлению, с babel прокатил такой синтаксис:
class X {
'method'() {
}
}
Баг или фича?
|
|
12.03.2015, 19:59
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от FINoM
|
К моему удивлению, с babel прокатил такой синтаксис:
class X {
'method'() {
}
}
Баг или фича?
|
Это нормальный синтаксис ES6:
class X {
method() {
}
'@method'() {
}
[1 + 2]() {
}
}
|
|
12.03.2015, 20:51
|
|
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
melky,
Цитата:
|
Tagged template strings. Вызываем функции без скобок?
|
kobezzza,
Цитата:
|
Скобки тут бы очень мешались, поэтому их нет, всё просто
|
Я однажды чуть не психанул и не переписал все вызовы методов в таком стиле
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Как сделать HTML фичи? |
2chan |
Events/DOM/Window |
6 |
26.09.2014 18:50 |
|
|
|