Как?! как можно жить без
Object.assign
?!
Да, вечером оформлю.
Пока что вот ссылки на гитхаб:
Object.assign
//using Object.keys: goo.gl/0QNMDz
//several sources: twitter.com/rwaldron/status/454114058640183296
//people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign
if (!Object.assign) {
Object.assign = function (target) {
Array.prototype.slice.call(arguments, 1).forEach(function (source) {
Object.keys(source).forEach(function (key) {
target[key] = source[key];
});
});
return target;
};
}
Array generics
//Array generic methods
new function () {
function fastApply(method, args) {
var target = args[0];
switch (args.length) {
case 1:
return method.call(target);
case 2:
return method.call(target, args[1]);
case 3:
return method.call(target, args[1], args[2]);
}
return method.apply(target, Array.prototype.slice.call(args, 1));
}
function createGeneric(method) {
return function () {
return fastApply(method, arguments);
};
}
function createGenerics(source, names) {
return names.reduce(function (methods, name) {
methods[name] = createGeneric(source[name]);
return methods;
}, {});
}
function implement(object, methods) {
Object.keys(methods).forEach(function (name) {
if (!(name in object)) {
object[name] = methods[name];
}
});
}
implement(Array, createGenerics(Array.prototype, [
'concat', 'every', 'fill', 'filter', 'find',
'findIndex', 'forEach', 'indexOf', 'join',
'lastIndexOf', 'map', 'pop', 'push', 'reduce',
'reduceRight', 'reverse', 'shift', 'slice',
'some', 'sort', 'splice', 'unshift'
]));
};
setImmediate IE9+
window.setImmediate || Object.assign(window, window.msSetImmediate ? {
//IE10
setImmediate: window.msSetImmediate,
clearImmediate: window.msClearImmediate
} : new function () {
var id = 0,
storage = {},
firstCall = true,
message = 'setImmediatePolyfillMessage';
function fastApply(args) {
var func = args[0];
switch (args.length) {
case 1:
return func();
case 2:
return func(args[1]);
case 3:
return func(args[1], args[2]);
}
return func.apply(window, Array.prototype.slice.call(args, 1));
}
function callback(event) {
var data,
key = event.data;
if ('string' == typeof key && key.startsWith(message)) {
data = storage[key];
if (data) {
fastApply(data);
delete storage[key];
}
}
}
return {
setImmediate: function () {
var key = message + ++id;
storage[key] = arguments;
if (firstCall) {
firstCall = false;
window.addEventListener('message', callback);
}
window.postMessage(key, '*');
return id;
},
clearImmediate: function (id) {
delete storage[message + id];
}
};
});
сам
Promise polyfill
правда я там в последней версии дописал
window.
перед
setImmediate
, потому что
'setImmediate' in Window.prototype → true
, не знаю, может зря так сделал, если кто в Nodejs захочет подключить, работать не будет, хотя для ноды и так миллион полифилов есть… сделать через
global
?
----------
Наверное отдельный самодостаточный репозиторий на гитхабе сделаю