Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 25.11.2014, 10:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от kostyanet
А вот писать везде if(typeof some_var === 'undefined') меня уже подзаебало. JS же в упор не хочет отвечать за вложение больше 1 глубиной. На php if(isset(arr['one']['two']['three']['four']))... на js - х нанэ. Или как-то делается?
кто то мешает написать подобие isset?

простейший вариант:
function isset(object, keys) {
  keys = (keys instanceof Array ? keys : [keys]).slice(0);
  return object !== void 0 && keys[0] in object
    ? keys.length === 1 || isset(object[keys[0]], keys.slice(1)) : false;
}

var o = {
  a: {
    w: {
      r: {
        t: {
          y: 1
        }
      }
    }
  }
};

alert(isset(o, 'a')); // true
alert(isset(o, 'w')); // false
alert(isset(o, ['a', 'w', 'r', 't', 'y'])); // true
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #32 (permalink)  
Старый 25.11.2014, 11:25
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
а где он таков есть?
Тьфу, да, нигде, попутал.

Цитата:
Печально все таки, что эти гребаные комитетчики ломают язык. Если бы __proto__ не было deprecated, можно было бы обойтись без бубнов
Ну, во-первых, на замен приходит полностью аналогичный функционально Object.setPrototypeOf, во-вторых, в ES6, где __proto__ устарел, этих бубнов и не понадобится - в нем есть нормальные классы.
Ответить с цитированием
  #33 (permalink)  
Старый 25.11.2014, 11:51
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Erolast
этих бубнов и не понадобится - в нем есть нормальные классы.
а для старых браузеров есть __proto__ Хоть он и deprecated но мелкософт в свой ИЕ11 все же добавил это свойство)
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #34 (permalink)  
Старый 25.11.2014, 12:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от devote
кто то мешает написать подобие isset?
Не так должно быть, а так как есть

if(isset(obj.some.prop.on.the.deep))

не важно, такие вещи полифилами не сделаешь, или сделаешь угребище. Я прежде чем пожаловаться вам уже пожаловался самому себе и поискал как люди делают - да нихера не делают. Максимум забубенят глобально U='undefined' и вперде.
Ответить с цитированием
  #35 (permalink)  
Старый 25.11.2014, 13:24
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Все равно извилинами не понимаю как оно работает, только интуицией, по которой все и сделал. Вот код с купюрами лишнего:

var FormField=function(elem){

	var	type=		elem.type,
		title=		elem.title,
		pattern=	elem.getAttribute('pattern'),
		required=	elem.getAttribute('required'),
		multiple=	elem.getAttribute('multiple'),
		errmsg=		elem.getAttribute('errmsg')+elem.getAttribute('placeholder'),
		value=		null,
		rules={ // тут несколько функций проверки длины, паттерна и тп};

	return {
		elem:elem,
		update:function(v){
			elem.value=v;
		},
		validate:function(event) {
			value=elem.value.trim();
			if(type in rules)
				rules[type](event);
			else
				rules.text(event);
		}
	};
};


В секции загрузки цикл типа

// сначала проверки всякие, типа кто без имени, кто без типа, 
// чекбоксы с радивами - пропустить, что вернется - то запишется в коллекцию

	if(type=='file')
		return FormFile(elem,progress);
	else
		return FormField(elem);


Я правильно понимаю что функция выполняется и возвращается результат - объект.

Но с чем он связан - с текстом функции как это я предполагаю реализуется во всяких onclick/onload, или где-то хранится уже интерпретированный экземпляр функции откуда и черпаются данные в этот объект. Блин, даже толком задать вопрос не могу.

Короче, тут функция копируется вместе с тем что возвращается, или ее логика существует в единственном экземпляре?
Ответить с цитированием
  #36 (permalink)  
Старый 25.11.2014, 13:29
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

В этом "объекте" собственно ничего и нет, кроме простейшей валидации, а а файловый сука жирный. Если даже он целиком превращается в инстансь - то фиг с ним, таких полей обычно всего 1. Но блин я тут вообще не понимаю что станет экземпляром, а что останется в чертеже.

Кстати, может оно все работает только потому что elem это live html element?
Ответить с цитированием
  #37 (permalink)  
Старый 26.11.2014, 06:51
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Не оставляю попыток понять где хобот, а где хвост. Вопрос такой, что делает код

function object(o) {
        function F() {}
        F.prototype = o;
        return new F();
    }


кроме ничего?

из статьи http://javascript.crockford.com/prototypal.html

Ну то есть я сделал по чертежу - и получил то же самое.

var obj = BaseClass(opts);
var inh=object(BaseClass(opts));

совершенно эквипенисуально. Наследуется от ничего, от F(). Меня вся эта хрень капец как запутала.
Ответить с цитированием
  #38 (permalink)  
Старый 26.11.2014, 07:04
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я предложил целлулоидную метафору действующего вещества канонического наследования. Примитивно говоря, техническим языком без метафор - это merge. С учетом scope и все такое, что меня не касается, поскольку делается на уровне интерпретатора.

Кто-нибудь может предложить метафору квази-наследования в JS, действующее вещество так сказать? Что за хрень этот прототип - прототипом не являющийся?

Если это типа lazy binding

$obj=new Object();
$obj->prototype=new ProtoObject();

и затем на уровне интерпретатора ослеживание по ключевому слову всех такого рода связей, то никакого наследования тут вообще нет. В объект захерачивается столько слоев, сколько их профтыкано в прототип. Как при этом перезаписать/перекрыть свойство или метод? Ну то есть как сделать интерфейс и затем его наполнить содержанием?
Ответить с цитированием
  #39 (permalink)  
Старый 26.11.2014, 09:46
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от kostyanet
Вопрос такой, что делает код
При вызове функции создается пустая функция, на нее вешается в качествe prototype o, и она возвращает экземпляр F

Последний раз редактировалось krutoy, 26.11.2014 в 09:49.
Ответить с цитированием
  #40 (permalink)  
Старый 26.11.2014, 10:13
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от kostyanet Посмотреть сообщение
Вопрос такой, что делает код
function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}
Создает новый объект, у которого __proto__ ссылается на o.
var someObj = {someProp: 'somevalue'};
var inhObj = object(someObj);

//аналогично этому:
var someObj = {someProp: 'somevalue'};
var inhObj = {};
inhObj.__proto__ = someObj;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16
Ещё один PINQ Kfuse Ваши сайты и скрипты 21 07.05.2010 12:50
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Еще один вопрос по setTimeout setInterval Хранитель Света Общие вопросы Javascript 5 12.03.2009 22:37
Еще один вариант плавно раскрывающегося дива (экспандер, спойлер) Alekson Ваши сайты и скрипты 0 23.12.2008 03:01