Этот метод настройки не может работать. Независимо от того, какая функция возвращает, если используется вызов функции в качестве единственного выражения левой части (LHS) выражения присваивания, вы получаете
ReferenceError: Invalid left-hand side in assignment
и тому подобное. Как говорили другие, вы не видите исключение ReferenceError
, потому что оно поймано, когда его бросают, и нет кода для его обработки. Функции являются первоклассными объектами, но звонки им неvalid LHS values. Вы увидите это ясно, если вставить console.log(e);
в блок catch
.
Этот подход с геттером может работать. Однако, если вы хотите, методы получения и установки, на последней в соответствующей реализации ECMAScript Edition, 5 you can have that natively:
Object.defineProperty(props, "name", (function() {
var _value;
return {
set: function (value) {
/* setter code, simple example */
_value = String(value);
},
get: function() {
/* getter code, simple example */
return _value;
}
};
}()));
/* triggers the setter */
props.name = 42;
/* triggers the getter */
var x = props.name;
/* "42" */
x
«Edit 2» -
var someObjs = [{a:"",someProp:"b"}];
(function (a) { return someObjs[a]})(0).someProp = "c";
console.log(someObjs[0].someProp);
- работает, потому что возвращаемое значение функции используется как LHS, но как часть другое выражение, которое оценивает доступ к собственности (с использованием синтаксиса доступа к объекту dot). Функция возвращает ссылку на объект (на экземпляр Object
), чье свойство затем открывается. Доступ к свойствам является LHS выражения присваивания, этому свойству присваивается значение RHS ("c"
).
Это функционально эквивалентно
var someObjs = [
{a: "", someProp: "b"}
];
(function() {
return someObjs[0];
}()).someProp = "c";
console.log(someObjs[0].someProp);
и, следовательно, к
someObjs[0].someProp = "c";
console.log(someObjs[0].someProp);
(как вы можете видеть, хороший стиль кода помогает много с пониманием кода)
Этот код сеттера не выглядит законным. 'props.Property (name)' не является Lvalue. Вы уверены, что это точный код? – Jacob
Мои мысли точно. Я могу подтвердить, что это без опечатки. – Valchris
Возвращаемое значение вызова функции является значением, а не ссылкой. Это приведет к исходной ошибке. –