Object.prototype.__defineSetter__()
Ðе ÑÑандаÑÑно: ÐÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑÑандаÑÑизиÑована. ÐÑ Ð½Ðµ ÑекомендÑем иÑполÑзоваÑÑ Ð½ÐµÑÑандаÑÑнÑе ÑÑнкÑии в дейÑÑвÑÑÑÐ¸Ñ Ð¿ÑоекÑÐ°Ñ , Ñак как Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка бÑаÑзеÑами огÑаниÑена, а поведение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð¸Ð»Ð¸ бÑÑÑ Ñдалено. Тем не менее, в некоÑоÑÑÑ ÑлÑÑаÑÑ , когда Ð½ÐµÑ ÑÑандаÑÑного ÑеÑениÑ, они могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑей алÑÑеÑнаÑивой.
УÑÑаÑело: ÐÑа возможноÑÑÑ Ð±Ñла Ñдалена из веб-ÑÑандаÑÑов. ХоÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе бÑаÑзеÑÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÐµÑ, она Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² пÑоÑеÑÑе ÑдалениÑ. Ðе иÑполÑзÑйÑе ÐµÑ Ð½Ð¸ в ÑÑаÑÑÑ , ни в новÑÑ Ð¿ÑоекÑÐ°Ñ . СÑÑаниÑÑ Ð¸Ð»Ð¸ веб-пÑиложениÑ, иÑполÑзÑÑÑие еÑ, могÑÑ Ð² лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑломаÑÑÑÑ.
Сводка
ÐеÑод __defineSetter__() пÑивÑзÑÐ²Ð°ÐµÑ ÑвойÑÑво обÑекÑа к ÑÑнкÑии, вÑзÑваемой каждÑй Ñаз пÑи попÑÑке ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение ÑÑого ÑвойÑÑва.
СинÑакÑиÑ
obj.__defineSetter__(prop, fun)
ÐаÑамеÑÑÑ
prop-
СÑÑока, ÑодеÑжаÑÐ°Ñ Ð¸Ð¼Ñ ÑвойÑÑва, пÑивÑзÑваемого к заданной ÑÑнкÑии.
fun-
ФÑнкÑиÑ, вÑзÑÐ²Ð°ÐµÐ¼Ð°Ñ Ð¿Ñи попÑÑке ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑвойÑÑвÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¸Ð¼ÐµÐµÑ Ð²Ð¸Ð´:
function(val) { . . . }val-
ÐÑевдоним пеÑеменной, ÑодеÑжаÑей знаÑение, коÑоÑое пÑÑаÑÑÑÑ Ð¿ÑиÑвоиÑÑ ÑвойÑÑвÑ
prop.
ÐпиÑание
ÐеÑод __defineSetter__() позволÑÐµÑ Ð¾Ð¿ÑеделÑÑÑ ÑеÑÑÐµÑ Ð½Ð° Ñже ÑÑÑеÑÑвÑÑÑем обÑекÑе.
ÐÑимеÑÑ
// ÐеÑÑандаÑÑнÑй и ÑÑÑаÑевÑий ÑпоÑоб
const o = {};
o.__defineSetter__("value", function (val) {
this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
// СпоÑоб, ÑовмеÑÑимÑй Ñо ÑÑандаÑÑом
// ÐÑполÑзование опеÑаÑоÑа set
const o = {
set value(val) {
this.anotherValue = val;
},
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
// ÐÑполÑзование меÑода Object.defineProperty()
const o = {};
Object.defineProperty(o, "value", {
set: function (val) {
this.anotherValue = val;
},
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
СпеÑиÑикаÑии
Ðе ÑвлÑеÑÑÑ ÑаÑÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо ÑпеÑиÑикаÑии.
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
Object.prototype.__defineGetter__()- опеÑаÑоÑ
set Object.defineProperty()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()- Ð ÑководÑÑво по JS: опÑеделение геÑÑеÑов и ÑеÑÑеÑов
- [ÐапиÑÑ Ð² блоге] УÑÑаÑевание __defineGetter__ и __defineSetter__ (англ.)
- Firefox bug 647423