Цитата:
простейший вариант:
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, время: 05:57. |