"Я подумал, что если объекты имеют hasOwnProperty
, они также должны иметь
getOwnProperty
и setOwnProperty
"
Функция hasOwnProperty()
сообщает вам, существует ли именованное свойство как прямое свойство объекта, по сравнению с унаследованным свойством где-то в цепочке прототипов объекта. Оператор in
, используемый как if (someProperty in someObject) {}
, скажет вам, обладает ли объект этим свойством где-либо в цепочке прототипов.
Вам не нужна соответствующая setOwnProperty()
функция, потому что вы можете просто сказать:
someObject[someProperty] = someValue;
Я предполагаю, что идея соответствующего вида функции getOwnProperty()
имеет смысл, если вы хотите, чтобы функция возвращала значение, только если указанное свойство является прямым свойством, но тогда не было бы никакого способа указать, что указанное свойство не найдено, потому что null, undefined, false и т. д. являются допустимыми потенциальными значениями, если свойство равно найдено. Так что для достижения этого вам нужно сделать это в два этапа, используя if (hasOwnProperty())
.
Но это не похоже на то, что вы пытаетесь сделать. Если я вас правильно понимаю, вы просто хотите каким-то образом установить свойство, где имя свойства находится в переменной (в вашем случае, элемент массива). Вы не даете понять, какие значения вы хотите связать с этими свойствами, поэтому я просто буду использовать true
.
var arr = ['has_cats', 'has_dogs'];
var obj = {}; // note {} is generally preferred to new Object();
for(var i=0; i < arr.length; i++ ) {
// if the property doesn't already exist directly on
// the object
if(!obj.hasOwnProperty(arr[i])) {
// set the object property
obj[arr[i]] = true;
}
}
// can access with bracket notation
alert(obj["has_cats"]);
// can access with dot notation
alert(obj.has_cats);