13.10.2014, 16:23
|
|
Аспирант
|
|
Регистрация: 14.04.2010
Сообщений: 46
|
|
Расширение (наследование) переменных. Возможно ли такое?
Есть переменная с параметрами:
var settings1 = {
mode: "text/html",
tabSize: 2,
readOnly: true
}
Есть вторая переменная:
var settings2 = {
mode: "text/html",
tabSize: 2,
readOnly: false,
lineWrapping: true
}
Существует ли возможность описать базовую переменную содержащую общие поля, а потом ее расширить?
Что-то типа такого:
var
settings1 = {
mode: "text/html",
tabSize: 2,
readOnly: true
},
settings2 = (settings1) {
readOnly: false,
lineWrapping: true
}
|
|
13.10.2014, 16:49
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,230
|
|
Сообщение от Roman Koff
|
Что-то типа такого
|
Оно?
function Def() {
this.mode = "text/html"
this.tabSize = 2
this.readOnly = true
};
function My_Def() {
this.readOnly = false
this.lineWrapping = true
};
var def= new Def();
My_Def.prototype = def;
var obj= new My_Def();
for (fld in obj) {
alert(fld+'='+obj[fld])
};
|
|
13.10.2014, 16:55
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от ksa
|
Наследование есть
|
Странно, не нашел там то, чего надо )
var settings1 = {
mode: "text/html",
tabSize: 2,
readOnly: true
};
var settings2 = Object.create(settings1);
settings2.readOnly = false;
settings2.ineWrapping = true;
alert(settings2.readOnly); // свое, родное
alert(settings2.mode); // из прототипа
Object.create - из ES5, со всеми вытекающими.
Почти в каждом js-фреймворке есть функция extend.
Есть она и в jQuery:
settings1 = {
mode: "text/html",
tabSize: 2,
readOnly: true
},
settings2 = $.extend({
readOnly: false,
lineWrapping: true
}, settings1);
В будущем будет что-то вроде Object.assing - вроде то, что нужно.
__________________
В личку только с интересными предложениями
|
|
13.10.2014, 17:10
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
В будущем будет что-то вроде Object.assing - вроде то, что нужно.
|
Цитата:
|
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.
Syntax:
Object.assign(target, ...sources)
|
Полифилл:
if (!Object.assign) {
Object.defineProperty(Object, "assign", {
enumerable: false,
configurable: true,
writable: true,
value: function(target, firstSource) {
"use strict";
if (target === undefined || target === null)
throw new TypeError("Cannot convert first argument to object");
var to = Object(target);
var hasPendingException = false;
var pendingException;
for (var i = 1; i < arguments.length; i++) {
var nextSource = arguments[i];
if (nextSource === undefined || nextSource === null)
continue;
var keysArray = Object.keys(Object(nextSource));
for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
var nextKey = keysArray[nextIndex];
try {
var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
if (desc !== undefined && desc.enumerable)
to[nextKey] = nextSource[nextKey];
} catch (e) {
if (!hasPendingException) {
hasPendingException = true;
pendingException = e;
}
}
}
if (hasPendingException)
throw pendingException;
}
return to;
}
});
}
https://developer.mozilla.org/en-US/.../Object/assign
|
|
13.10.2014, 18:26
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от Erolast
|
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object.
|
Типа делегирования, или как-то еще называется по-научному такой сборщ, забыл.
Сообщение от danik.js
|
Странно, не нашел там то, чего надо )
|
Ничего странного, это же ru. Мне вот этот чувак понравился:
http://yehudakatz.com/2011/08/12/und...in-javascript/
Кстати, по мозиле, там запростяк могут любую шнягу отпостить - походу начальство не проверяет что контрибуторы валят. Так что проверяйте и не пеняйте. Самый прикол был в статье про ту самую urlEncode, на которую шла ссылка с deprecated escape(). В примере как правильно пользоваться urlEncode(или как она там) несколько раз применялась escape() для улучшения результата. Еще скачивал у них полифил addEventListener для дневнего ишака, попробовать - ишак сразу сказал что .Event в if(Object.Event) ундефайнед и дальше не пошел.
Последний раз редактировалось kostyanet, 13.10.2014 в 18:36.
|
|
13.10.2014, 18:44
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Пно escape - ты про эту чтоли страницу? https://developer.mozilla.org/ru/doc...PI/DOM/Storage
Дык ты смотри на автора: akhabibullina (Khakrov, Ukraine)
Шучу ) Авторов оригинала - целый рой.
__________________
В личку только с интересными предложениями
|
|
13.10.2014, 18:55
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Кстати, по мозиле, там запростяк могут любую шнягу отпостить - походу начальство не проверяет что контрибуторы валят. Так что проверяйте и не пеняйте.
|
Полифилл Object.assign нормально работает, сам им пользуюсь.
|
|
13.10.2014, 19:11
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от kostyanet
|
Вот эту
|
И первое что я там вижу:
Цитата:
|
This article is in need of a technical review.
|
По сути же, мало ли что там говорят про escape. На деле никто не выпилил и врядли когда-либо выпилит эту функцию.
Ща открыл в хроме document.all - и оно все еще есть, хоть и typeof выдает undefined
__________________
В личку только с интересными предложениями
|
|
|
|