/*
* Возвращает вновь созданный объект, наследующий свойства
* объекта-прототипа p. Использует функцию Object.create() из ECMAScript 5,
* если она определена, иначе используется более старый прием
*/
function inherit(p) {
if (p === null) throw TypeError();
if (Object.create) return Object.create(p);
var t = typeof p;
if (t !== "object" && t !== "function") throw TypeError();
function f() {}
f.prototype = p;
return new f();
}
/*
* Копирует перечислимые свойства из объекта p в объект o и возвращает o.
* Если o и p имеют свойства с одинаковыми именами, значение свойства
* в объекте o затирается значением свойства из объекта p.
* Эта функция не учитывает наличие методов доступа и не копирует атрибуты.
*/
function extend(o, p) {
for (var prop in p)
o[prop] = p[prop];
return o;
}
/*
* Копирует перечислимые свойства из объекта p в объект o и возвращает o.
* Если o и p имеют свойства с одинаковыми именами, значение свойства
* в объекте o остается неизменным.
* Эта функция не учитывает наличие методов доступа и не копирует атрибуты.
*/
function merge(o, p) {
for (var prop in p) {
if (o.hasOwnProperty(prop)) continue;
o[prop] = p[prop];
}
return o;
}
/*
* Удаляет из объекта o свойства, отсутствующие в объекте p.
* Возвращает o.
*/
function restrict(o, p) {
for (var prop in o)
if (!(prop in p)) delete o[prop];
return o;
}
/*
* Удаляет из объекта o свойства, присутствующие в объектеp. Возвращает o.
*/
function subtract(o, p) {
for (var prop in p)
delete o[prop];
return o;
}
/*
* Возвращает новый объект, содержащий свойства, присутствующие хотя бы в одном
* из объектов, o или p. Если оба объекта, o или p, имеют свойства с одним
* и тем же именем, используется значение свойства из объекта p.
*/
function union(o, p) {
return extend(extend({}, o), p);
}
/*
* Возвращает новый объект, содержащий свойства, присутствующие сразу в обоих
* объектах, o или p. Результат чем-то напоминает пересечение o и p,
* но значение свойств объекта p отбрасываются.
*/
function intersection(o, p) {
return restrict(extend({}, o), p);
}
/*
* Возвращает массив имен собственных перечислимых свойств объекта o.
*/
function keys(o) {
if (typeof o !== "object") throw TypeError();
var result = [];
for (var prop in o) {
if (o.hasOwnProperty(prop))
result.push(prop);
}
return result;
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.