Цитата:
простейший вариант: 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 |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
if(isset(obj.some.prop.on.the.deep)) не важно, такие вещи полифилами не сделаешь, или сделаешь угребище. Я прежде чем пожаловаться вам уже пожаловался самому себе и поискал как люди делают - да нихера не делают. Максимум забубенят глобально U='undefined' и вперде. |
Все равно извилинами не понимаю как оно работает, только интуицией, по которой все и сделал. Вот код с купюрами лишнего:
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, или где-то хранится уже интерпретированный экземпляр функции откуда и черпаются данные в этот объект. Блин, даже толком задать вопрос не могу. Короче, тут функция копируется вместе с тем что возвращается, или ее логика существует в единственном экземпляре? |
В этом "объекте" собственно ничего и нет, кроме простейшей валидации, а а файловый сука жирный. Если даже он целиком превращается в инстансь - то фиг с ним, таких полей обычно всего 1. Но блин я тут вообще не понимаю что станет экземпляром, а что останется в чертеже.
Кстати, может оно все работает только потому что elem это live html element? |
Не оставляю попыток понять где хобот, а где хвост. Вопрос такой, что делает код
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(). Меня вся эта хрень капец как запутала. |
Я предложил целлулоидную метафору действующего вещества канонического наследования. Примитивно говоря, техническим языком без метафор - это merge. С учетом scope и все такое, что меня не касается, поскольку делается на уровне интерпретатора.
Кто-нибудь может предложить метафору квази-наследования в JS, действующее вещество так сказать? Что за хрень этот прототип - прототипом не являющийся? Если это типа lazy binding $obj=new Object(); $obj->prototype=new ProtoObject(); и затем на уровне интерпретатора ослеживание по ключевому слову всех такого рода связей, то никакого наследования тут вообще нет. В объект захерачивается столько слоев, сколько их профтыкано в прототип. Как при этом перезаписать/перекрыть свойство или метод? Ну то есть как сделать интерфейс и затем его наполнить содержанием? |
Цитата:
|
Цитата:
var someObj = {someProp: 'somevalue'}; var inhObj = object(someObj); //аналогично этому: var someObj = {someProp: 'somevalue'}; var inhObj = {}; inhObj.__proto__ = someObj; |
Часовой пояс GMT +3, время: 04:06. |