Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2014, 16:23
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 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
  }
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2014, 16:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Roman Koff
Существует ли возможность описать базовую переменную содержащую общие поля, а потом ее расширить?
Наследование есть
http://javascript.ru/tutorial/object...herez-prototip
Ответить с цитированием
  #3 (permalink)  
Старый 13.10.2014, 16:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от 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])
};
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2014, 16:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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 - вроде то, что нужно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 13.10.2014, 17:10
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 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
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2014, 18:26
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2014, 18:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Пно escape - ты про эту чтоли страницу? https://developer.mozilla.org/ru/doc...PI/DOM/Storage

Дык ты смотри на автора: akhabibullina (Khakrov, Ukraine)


Шучу ) Авторов оригинала - целый рой.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2014, 18:54
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Вот эту https://developer.mozilla.org/en-US/...Objects/escape

Блин, ну я вообще память теряю - encodeURI называется, а не urlEncode (это в php такая)

Ну вот, а потом идем куда послали https://developer.mozilla.org/en-US/...deURIComponent и там видим в колбэках ту самую ничтожную escape

Еще с fileReader'ом они меня нае..ли. Ладно, не важно.

Последний раз редактировалось kostyanet, 13.10.2014 в 18:57.
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2014, 18:55
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Кстати, по мозиле, там запростяк могут любую шнягу отпостить - походу начальство не проверяет что контрибуторы валят. Так что проверяйте и не пеняйте.
Полифилл Object.assign нормально работает, сам им пользуюсь.
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2014, 19:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от kostyanet
Вот эту
И первое что я там вижу:
Цитата:
This article is in need of a technical review.


По сути же, мало ли что там говорят про escape. На деле никто не выпилил и врядли когда-либо выпилит эту функцию.
Ща открыл в хроме document.all - и оно все еще есть, хоть и typeof выдает undefined
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить данные в файл? Возможно такое на JavaScript? Forgott Общие вопросы Javascript 35 26.06.2015 19:11
возможно ли сделать такое с помоши js,? sarik Общие вопросы Javascript 17 26.02.2013 11:31
возможно ли такое? disgraceful Events/DOM/Window 11 22.10.2012 11:19
Возможно ли такое осуществить? hacker_007 Общие вопросы Javascript 2 05.02.2011 20:33
Такое возможно? KOPCAP Общие вопросы Javascript 6 24.02.2009 20:44