Baseline Widely available
Object.defineProperty()
ã¯éçã¡ã½ããã§ããããªãã¸ã§ã¯ãã«æ°ããããããã£ãç´æ¥å®ç¾©ãããããªãã¸ã§ã¯ãã®æ¢åã®ããããã£ã夿´ããããã¦ããã®ãªãã¸ã§ã¯ããè¿ãã¾ãã
const object1 = {};
Object.defineProperty(object1, "property1", {
value: 42,
writable: false,
});
object1.property1 = 77;
// Throws an error in strict mode
console.log(object1.property1);
// Expected output: 42
æ§æ
Object.defineProperty(obj, prop, descriptor)
弿°
obj
ããããã£ãå®ç¾©ãããªãã¸ã§ã¯ãã§ãã
prop
æååã¾ã㯠Symbol
ã§ãå®ç¾©ã¾ãã¯å¤æ´ããããããã£ã®ãã¼ãæå®ãã¾ãã
descriptor
å®ç¾©ã¾ãã¯å¤æ´ããããããã£ã®è¨è¿°åã§ãã
æå®ããããããã£ã追å ã¾ãã¯å¤æ´ãããã颿°ã«æ¸¡ããããªãã¸ã§ã¯ãã
解説Object.defineProperty()
ã§ããããªãã¸ã§ã¯ãã®ããããã£ãæç¤ºçã«è¿½å ã¾ãã¯å¤æ´ãããã¨ãã§ãã¾ãã代å
¥ã«ããé常ã®ããããã£è¿½å ã§ã¯ãããããã£åæ (for...in
ã«ã¼ãã Object.keys()
ã¡ã½ãããªã©) ã«ç¾ããå¤ã¯å¤æ´å¯è½ã§ãã¾ãåé¤ãå¯è½ãªããããã£ãçæããã¾ãããã®ã¡ã½ããã§ã¯ããããã®è©³ç´°äºé
ãæ¢å®å¤ããå¤ãããã¨ãå¯è½ã§ããæ¢å®ã§ã¯ã Object.defineProperty()
ã使ã£ã¦è¿½å ãããããããã£ã¯æ¸ãè¾¼ã¿ä¸å¯ãåæä¸å¯ãæ§æä¸å¯ã«ãªãã¾ããå ãã¦ã Object.defineProperty()
ã¯å
é¨ã¡ã½ããã® [[DefineOwnProperty]]
ã [[Set]]
ã®ä»£ããã«ä½¿ç¨ãã¾ãã®ã§ãããããã£ãæ¢ã«åå¨ããå ´åã§ãã»ãã¿ã¼ãå¼ã³åºãã¾ããã
ããããã£ã®è¨è¿°åã¯ããã¼ã¿è¨è¿°åã¨ã¢ã¯ã»ãµã¼è¨è¿°åã®äºã¤ã«åããã¾ãããã¼ã¿è¨è¿°åã¯å¤ãæã¤ããããã£ã§ããã®å¤ã¯æ¸ãæãå¯è½ã«ãä¸å¯è½ã«ãã§ãã¾ããã¢ã¯ã»ãµã¼è¨è¿°åã¯ã颿°ã®ã²ãã¿ã¼ã¨ã»ãã¿ã¼ã®çµã§è¡¨ãããããããã£ã§ããè¨è¿°åã¯ãããäºç¨®é¡ã®ã©ã¡ããã§ãªããã°ãªããã両æ¹ã«ãªããã¨ã¯ã§ãã¾ããã
ã©ã¡ãã®å½¢ã§ãè¨è¿°åã¯ãªãã¸ã§ã¯ãã§è¡¨ç¾ãã¾ããå
±éãã¦ä»¥ä¸ã®ãªãã·ã§ã³ã®ãã¼ãæã¤ãã¨ãã§ãã¾ã (注: ããã§ããæ¢å®å¤ã¨ã¯ãObject.defineProperty()
ã使ã£ã¦ããããã£ãå®ç¾©ããå ´åã§ã)ã
configurable
ããã false
ã«è¨å®ããã¦ããå ´åã
writable: true
ã®ãã¼ã¿è¨è¿°åã§ããã°ã value
ã夿´ãã writable
ã false
ã«å¤æ´ãããã¨ãã§ãã¾ãï¼ãæ¢å®å¤ã¯ false
ã§ãã
enumerable
true
ã§ããå ´åã®ã¿ããã®ããããã£ã¯å¯¾å¿ãããªãã¸ã§ã¯ãã§ã®ããããã£åæã«ç¾ãã¾ããæ¢å®å¤ã¯ false
ã§ãã
ãã¼ã¿è¨è¿°åã¯ä»¥ä¸ã®ãªãã·ã§ã³ãã¼ãæã¡ã¾ãã
value
ããããã£ã«é¢é£ã¥ããããå¤ã§ããæå¹ãª JavaScript ã®å¤ï¼æ°å¤ããªãã¸ã§ã¯ãã颿°ãªã©ï¼ã§ããå¿
è¦ãããã¾ããæ¢å®å¤ã¯ undefined
ã§ãã
writable
true
ã§ããå ´åã®ã¿ãããããã£ã«é¢é£ã¥ããããå¤ã¯ä»£å
¥æ¼ç®åã§å¤æ´ãããã¨ãã§ãã¾ãã
æ¢å®å¤ã¯ false
ã§ãã
ã¢ã¯ã»ãµã¼è¨è¿°åã®å ´åã¯ãªãã·ã§ã³ã¨ãã¦æ¬¡ã®ãã¼ãæã¤ãã¨ãã§ãã¾ãã
get
ããããã£ã®ã²ãã¿ã¼ã¨ãªã颿°ã§ãã²ãã¿ã¼ãè¨ããªãå ´å㯠undefined
ã§ããããããã£ã«ã¢ã¯ã»ã¹ããã¨ãã®é¢æ°ã弿°ãªãã§ã³ã¼ã«ããã¾ãããã®é¢æ°å
ã§ this
ã¯ã¢ã¯ã»ã¹ãããã¨ããããããã£ãæã¤ãªãã¸ã§ã¯ãã«ãªãã¾ã (ããããã£ãå®ç¾©ããããã«ä½æããè¨è¿°åãªãã¸ã§ã¯ãã§ã¯ããã¾ãã)ãè¿å¤ã¯ãã®ããããã£ã®å¤ã¨ãã¦ä½¿ããã¾ãã æ¢å®å¤ã¯ undefined
ã§ãã
set
ããããã£ã®ã»ãã¿ã¼ã¨ãªã颿°ã§ãã»ãã¿ã¼ããªãå ´å㯠undefined
ã§ããããããã£ã«å¤ãå²ãå½ã¦ãããã¨ãããã®å¤ã弿°ã¨ãã¦ãã®é¢æ°ãã³ã¼ã«ããã¾ãããã®é¢æ°å
ã§ this
ã¯å²ãå½ã¦ããã¨ããããããã£ãæã¤ãªãã¸ã§ã¯ãã«ãªãã¾ãã æ¢å®å¤ã¯ undefined
ã§ãã
è¨è¿°åã« value
, writable
, get
, set
ã®ãããã®ãã¼ããªãå ´åããã¼ã¿è¨è¿°åã¨ãã¦æ±ããã¾ããè¨è¿°åã« value
ã¾ã㯠writable
ã¨ãget
ã¾ã㯠set
ã®ãã¼ã®ä¸¡æ¹ãããå ´åã¯ãä¾å¤ãçºçãã¾ãã
ãããã®ãã¼ã¯å¿
ãããè¨è¿°åãç´æ¥ææãã¦ããã¨ã¯éããªããã¨ã«çæãã¦ãã ãããç¶æ¿ãããããããã£ãåæ§ã§ãããããã®æ¢å®ã確å®ã«ä¿æããããã«ã¯ãè¨è¿°åãªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³ã«ããæ¢åã®ãªãã¸ã§ã¯ããåãã£ã¦åçµãããããã¹ã¦ã®ãªãã·ã§ã³ãæç¤ºçã«æå®ãããã null
ãããã¿ã¤ããªãã¸ã§ã¯ãã使ãã¾ãã
const obj = {};
// 1. null ãããã¿ã¤ãã®ä½¿ç¨: ç¶æ¿ãã¦ããããããã£ãªã
const descriptor = Object.create(null);
descriptor.value = "static";
// æ¢å®ã§ç¶æ¿ä¸å¯ã夿´ä¸å¯ãæ¸æä¸å¯
Object.defineProperty(obj, "key", descriptor);
// æç¤ºçãªæå®
Object.defineProperty(obj, "key2", {
enumerable: false,
configurable: false,
writable: false,
value: "static",
});
// åããªãã¸ã§ã¯ããåå©ç¨
function withValue(value) {
const d =
withValue.d ||
(withValue.d = {
enumerable: false,
writable: false,
configurable: false,
value,
});
// å¤ã®ä»£å
¥ã§éè¤æä½ãé²ã
if (d.value !== value) d.value = value;
return d;
}
// ãã®ããã«ä½¿ãã¾ãã
Object.defineProperty(obj, "key", withValue("static"));
// freeze ãå©ç¨ã§ãããªãããªãã¸ã§ã¯ãã®ãããã¿ã¤ãã®ããããã£
// (value, get, set, enumerable, writable, configurable) ã
// 追å ã»åé¤ãããã¨ãé²ããã¨ãã§ãã¾ãã
(Object.freeze || Object)(Object.prototype);
ããããã£ãæ¢ã«åå¨ããå ´åã Object.defineProperty()
ã¯è¨è¿°åã®å¤ã¨ããããã£ã®ç¾å¨ã®æ§æã«å¾ã£ã¦ããããã£ã夿´ãããã¨ãã¾ãã
å¤ãè¨è¿°åã® configurable
屿§ã false
ã«è¨å®ããã¦ããå ´åããã®ããããã£ã¯ æ§æä¸å¯ ã¨è¨ãã¾ããè¨å®ä¸å¯è½ãªã¢ã¯ã»ãµã¼ããããã£ã®å±æ§ã夿´ãããã¨ã¯ã§ãã¾ãããããã¼ã¿ããããã£ã¨ã¢ã¯ã»ãµã¼ããããã£ã®ç¨®é¡ãåãæ¿ãããã¨ãã§ãã¾ããã writable: true
ã®ãã¼ã¿ããããã£ã§ã¯ãå¤ã夿´ã㦠writable
屿§ã true
ãã false
ã«å¤æ´ãããã¨ãå¯è½ã§ãããã¼ã¿ããããã£ã§å
ã®å¤ã¨åãå¤ãå®ç¾©ããå ´åãé¤ããè¨å®ä¸å¯è½ãªããããã£å±æ§ï¼è¨±å¯ããã¦ããå ´å㯠value
㨠writable
ãé¤ãï¼ã夿´ãããã¨ãã㨠TypeError
ãçºçãã¾ãã
ç¾å¨ã®ããããã£ãæ§æå¯è½ãªå ´åã屿§ã undefined
ã«å®ç¾©ããã¨ããã®å±æ§ã¯å¹æçã«åé¤ããã¾ããä¾ãã°ã o.k
ãã¢ã¯ã»ãµã¼ããããã£ã§ããå ´åã Object.defineProperty(o, "k", { set: undefined })
ã¨ããã¨ã»ãã¿ã¼ãé¤å»ããk
ã¯ã²ãã¿ã¼ã®ã¿ãæã¤ãã¨ã«ãªãã®ã§ãèªã¿åãå°ç¨ã«ãªãã¾ããæ°ããè¨è¿°åã«å±æ§ããªãå ´åãå¤ãè¨è¿°åã®å±æ§å¤ã¯ä¿æããã¾ãï¼æé»çã« undefined
ã«åå®ç¾©ããããã¨ã¯ããã¾ããï¼ãç°ãªãã風å³ãã®è¨è¿°åãä¸ãããã¨ã§ããã¼ã¿ã¨ã¢ã¯ã»ãµã¼ããããã£ãåãæ¿ãããã¨ãå¯è½ã§ããä¾ãã°ãæ°ããè¨è¿°åãï¼value
ã¾ã㯠writable
ãæã¤ï¼ãã¼ã¿è¨è¿°åã®å ´åãå
ã®è¨è¿°åã® get
屿§ã¨ set
屿§ã¯ä¸¡æ¹ã¨ãåé¤ããã¾ãã
ãªãã¸ã§ã¯ãã«æå®ãããããããã£ãåå¨ããªãã¨ããObject.defineProperty()
ã¯æå®ãããå½¢ã§æ°ããªããããã£ãçæãã¾ããè¨è¿°åã®ãã¼ã¯çç¥ãããã¨ãã§ãããã®ãããªãã¼ã«ã¯æ¢å®å¤ãé©ç¨ããã¾ãã
const o = {}; // æ°ãããªãã¸ã§ã¯ãã®çæ
// ãã¼ã¿è¨è¿°åã«ãããdefineProperty ãç¨ãã¦
// ãªãã¸ã§ã¯ãããããã£ã追å ããä¾
Object.defineProperty(o, "a", {
value: 37,
writable: true,
enumerable: true,
configurable: true,
});
// o ãªãã¸ã§ã¯ãã« 'a' ããããã£ãåå¨ããããã«ãªãããã®å¤ã¯ 37 ã¨ãªãã¾ã
// ã¢ã¯ã»ãµã¼è¨è¿°åã«ãããdefineProperty ãç¨ãã¦
// ãªãã¸ã§ã¯ãããããã£ã追å ããä¾
let bValue = 38;
Object.defineProperty(o, "b", {
get() {
return bValue;
},
set(newValue) {
bValue = newValue;
},
enumerable: true,
configurable: true,
});
o.b; // 38
// o ãªãã¸ã§ã¯ãã« 'b' ããããã£ãåå¨ããããã«ãªãã
// ãã®å¤ã¯ 38 ã¨ãªãã¾ã
// o.b ã¯åå®ç¾©ãããªãéãããã®å¤ã¯å¸¸ã« bValue ã¨åãã§ãã
// ï¼è¨³æ³¨: ãã¼ã¿ã¨ã¢ã¯ã»ãµã¼ã®ï¼ä¸¡æ¹ãæ··å¨ããããã¨ã¯ã§ãã¾ããã
Object.defineProperty(o, "conflict", {
value: 0x9f91102,
get() {
return 0xdeadbeef;
},
});
// TypeError ãçºçãã¾ããvalue ã¯ãã¼ã¿è¨è¿°åã«ã®ã¿ã
// get ã¯ã¢ã¯ã»ãµã¼è¨è¿°åã«ã®ã¿ç¾ãã¾ãã
ããããã£ã®å¤æ´
æ¢åã®ããããã£ã夿´ããã¨ããæä½ãæåããããä½ãããªãããTypeError
ãçºçãããã¯ãç¾å¨ã®ããããã£æ§æã«ãã£ã¦æ±ºã¾ãã¾ãã
writable
ããããã£å±æ§ã false
ã®å ´åããã®ããããã£ã¯ãæ¸ãè¾¼ã¿ä¸å¯ãã«ãªãã¾ãã代å
¥ãã§ããªããªãã¾ããæ¸ãè¾¼ã¿ä¸å¯è½ãªããããã£ã«æ¸ãè¾¼ããã¨ããã¨ã夿´ãããã峿 ¼ã¢ã¼ãã§ã¯ã¨ã©ã¼ã«ãªãã¾ãã
const o = {}; // æ°ãããªãã¸ã§ã¯ãã®çæ
Object.defineProperty(o, "a", {
value: 37,
writable: false,
});
console.log(o.a); // 37 ããã°åºåããã¾ã
o.a = 25; // ã¨ã©ã¼ã¯çºçãã¾ãã
// ï¼å³æ ¼ã¢ã¼ãã§ã¯ãåãå¤ã代å
¥ããã¨ãã¦ããã¨ã©ã¼ãçºçãã¾ãã)
console.log(o.a); // 37 ããã°åºåããã¾ãã代å
¥æã¯åä½ãã¾ããã
// 峿 ¼ã¢ã¼ã
(() => {
"use strict";
const o = {};
Object.defineProperty(o, "b", {
value: 2,
writable: false,
});
o.b = 3; // TypeError ãçºç: "b" is read-only
return o.b; // ä¸ã®è¡ã¯åä½ãã 2 ãè¿ãã¾ã(訳注:æ£ããã¯ãããã«å¶å¾¡ã¯æ¥ã¾ããã)
})();
enumerable 屿§
enumerable
ããããã£å±æ§ã¯ããã®ããããã£ã Object.assign()
ã ã¹ãã¬ããæ¼ç®åã§èªèããããã©ãããå®ç¾©ãã¾ãã Symbol
以å¤ã®ããããã£ã§ã¯ã for...in
ã«ã¼ãã Object.keys()
ã«ç¾ãããã©ãããå®ç¾©ãã¾ãã詳細æ
å ±ã«ã¤ãã¦ã¯ãããããã£ã®åæå¯è½æ§ã¨æææ¨©ãåç
§ãã¦ãã ããã
const o = {};
Object.defineProperty(o, "a", {
value: 1,
enumerable: true,
});
Object.defineProperty(o, "b", {
value: 2,
enumerable: false,
});
Object.defineProperty(o, "c", {
value: 3,
}); // enumerable ã®æ¢å®å¤ã¯ false
o.d = 4; // ãã®ããã«ããããã£ãçæããã¨ãã enumerable ã®æ¢å®å¤ã¯ true
Object.defineProperty(o, Symbol.for("e"), {
value: 5,
enumerable: true,
});
Object.defineProperty(o, Symbol.for("f"), {
value: 6,
enumerable: false,
});
for (const i in o) {
console.log(i);
}
// 'a' 㨠'd' ããã°åºåããã¾ãï¼å¸¸ã«åãé åºï¼
Object.keys(o); // ['a', 'd']
o.propertyIsEnumerable("a"); // true
o.propertyIsEnumerable("b"); // false
o.propertyIsEnumerable("c"); // false
o.propertyIsEnumerable("d"); // true
o.propertyIsEnumerable(Symbol.for("e")); // true
o.propertyIsEnumerable(Symbol.for("f")); // false
const p = { ...o };
p.a; // 1
p.b; // undefined
p.c; // undefined
p.d; // 4
p[Symbol.for("e")]; // 5
p[Symbol.for("f")]; // undefined
configurable 屿§
configurable
屿§ã¯ãããããã£ããªãã¸ã§ã¯ãããåé¤ã§ãããã¨ããããã£ã®å±æ§ (value
㨠writable
以å¤) ã夿´ã§ããããå¶å¾¡ãã¾ãã
ãã®ä¾ã¯ãæ§æå¯è½ã§ãªãã¢ã¯ã»ãµã¼ããããã£ã示ãã¦ãã¾ãã
const o = {};
Object.defineProperty(o, "a", {
get() {
return 1;
},
configurable: false,
});
Object.defineProperty(o, "a", {
configurable: true,
}); // TypeError ãçºç
Object.defineProperty(o, "a", {
enumerable: true,
}); // TypeError ãçºç
Object.defineProperty(o, "a", {
set() {},
}); // TypeError ãçºç (set ã¯æªå®ç¾©ã§ãã£ã)
Object.defineProperty(o, "a", {
get() {
return 1;
},
}); // TypeError ãçºç
// (æ°ã㪠get ã¯å
¨ãåãã§ããã«ãããããã)
Object.defineProperty(o, "a", {
value: 12,
}); // TypeError ãçºç
// ('configurable' ã false ã§ã 'value' ã¯å¤æ´ã§ãã¾ãããããã§ã¯ 'get' ã¢ã¯ã»ãµã¼ããããã夿´ã§ãã¾ãã)
console.log(o.a); // logs 1
delete o.a; // ä½ãèµ·ãã¾ãã
console.log(o.a); // logs 1
o.a
ã® configurable
屿§ã true
ã§ããå ´åãã¨ã©ã¼ãçºçãããã¨ãªãæçµçã«ããããã£ãåé¤ããã¾ãã
ãã®ä¾ã¯ãæ§æå¯è½ã§ã¯ãªããæ¸ãè¾¼ã¿å¯è½ãªãã¼ã¿ããããã£ã示ãã¦ãã¾ããããããã£ã® value
ã¯å¤æ´å¯è½ã§ã writable
㯠true
ãã false
ã«åãæ¿ãããã¨ãã§ãã¾ãã
const o = {};
Object.defineProperty(o, "b", {
writable: true,
configurable: false,
});
console.log(o.b); // undefined
Object.defineProperty(o, "b", {
value: 1,
}); // æ§æå¯è½ãªå¤ã false ã®å ´åã§ãããªãã¸ã§ã¯ãã¯æ¸ãè¾¼ã¿å¯è½ãªã®ã§ãå¤ãç½®ãæãããã¨ãã§ãã
console.log(o.b); // 1
o.b = 2; // å²ãå½ã¦ãæ¼ç®åã使ã£ã¦å¤ã夿´ãããã¨ãã§ãã
console.log(o.b); // 2
// ããããã£ã®æ¸ãè¾¼ã¿å¯è½å±æ§ãåãæ¿ãã
Object.defineProperty(o, "b", {
writable: false,
});
Object.defineProperty(o, "b", {
value: 1,
}); // TypeError: ããããã£ã¯æ¸ãè¾¼ã¿ãæ§æãå¯è½ã§ãªãããã夿´ãããã¨ãã§ããªã
// ãã®æç¹ã§ã 'b' ãããã«å¤æ´ããããæ¸ãè¾¼ã¿å¯è½ãªç¶æ
ã«
// æ»ãããããæ¹æ³ã¯ããã¾ãã
ãã®ä¾ã¯æ§æå¯è½ãªããããæ¸ãè¾¼ã¿ä¸å¯è½ãªãã¼ã¿ããããã£ã示ãã¦ãã¾ããããããã£ã® value
㯠defineProperty
ã§ç½®ãæãããã¨ãã§ãï¼ä»£å
¥æ¼ç®åã§ã¯ãªãï¼ãwritable
ã¯åãæ¿ãããã¨ãã§ãã¾ãã
const o = {};
Object.defineProperty(o, "b", {
writable: false,
configurable: true,
});
Object.defineProperty(o, "b", {
value: 1,
}); // defineProperty ã§å¤ãç½®ãæãããã¨ãã§ãã
console.log(o.b); // 1
o.b = 2; // 峿 ¼ã¢ã¼ãã§ã¯ TypeError ãçºç: æ¸ãè¾¼ã¿ä¸å¯è½ãªããããã£ã®å¤ãå²ãå½ã¦ããã¨ã§å¤æ´ãããã¨ã¯ã§ãã
ãã®ä¾ã¯æ§æå¯è½ã§ãªããæ¸ãè¾¼ã¿ä¸å¯ã®ãã¼ã¿ããããã£ã示ãã¦ãã¾ããããããã£ã®å¤
ãå«ããããããã£ã®å±æ§ãæ´æ°ããæ¹æ³ã¯ããã¾ããã
const o = {};
Object.defineProperty(o, "b", {
writable: false,
configurable: false,
});
Object.defineProperty(o, "b", {
value: 1,
}); // TypeError: ããããã£ã¯æ¸ãè¾¼ã¿ãæ§æãå¯è½ã§ã¯ãªãããã夿´ãããã¨ã¯ã§ããªã
ããããã£ããã³æ¢å®å¤ã®è¿½å
屿§ã®æ¢å®å¤ãã©ãé©ç¨ãããããèãããã¨ã¯éè¦ã§ããå¤ã®å²ãå½ã¦ã«ããããã£ã¢ã¯ã»ãµã¼ãç¨ããå ´å㨠Object.defineProperty()
ãç¨ããå ´åã¨ã§ã¯ã以ä¸ã®ä¾ã§ç¤ºããã¨ããã«éããããã¾ãã
const o = {};
o.a = 1;
// ããã¯ä»¥ä¸ã¨åãã§ãã
Object.defineProperty(o, "a", {
value: 1,
writable: true,
configurable: true,
enumerable: true,
});
// ãã®ä¸æ¹ã§ã
Object.defineProperty(o, "a", { value: 1 });
// ããã¯ä»¥ä¸ã¨åãã§ãã
Object.defineProperty(o, "a", {
value: 1,
writable: false,
configurable: false,
enumerable: false,
});
ç¬èªã®ã²ãã¿ã¼ããã³ã»ãã¿ã¼
ä¾ã¨ãã¦èªå¾çã«è¨é²ãè¡ããªãã¸ã§ã¯ãã使ãã¦ã¿ã¾ããtemperature
ããããã£ã«å¤ã代å
¥ãããã¨ãé
å archive
ã«è¦ç´ ãä¸ã¤è¿½å ããã¾ãã
function Archiver() {
let temperature = null;
const archive = [];
Object.defineProperty(this, "temperature", {
get() {
console.log("get!");
return temperature;
},
set(value) {
temperature = value;
archive.push({ val: temperature });
},
});
this.getArchive = () => archive;
}
const arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]
次ã®ä¾ã§ã¯ãã²ãã¿ã¼ã常ã«åãå¤ãè¿ãããã«ãã¦ãã¾ãã
const pattern = {
get() {
return "I always return this string, whatever you have assigned";
},
set() {
this.myname = "this is my name string";
},
};
function TestDefineSetAndGet() {
Object.defineProperty(this, "myproperty", pattern);
}
const instance = new TestDefineSetAndGet();
instance.myproperty = "test";
console.log(instance.myproperty);
// I always return this string, whatever you have assigned
console.log(instance.myname); // this is my name string
ããããã£ã®ç¶æ¿
ã¢ã¯ã»ãµã¼ããããã£ãç¶æ¿ãããã¨ããã®æ´¾çã¯ã©ã¹ã§ãããããã£ãã¢ã¯ã»ã¹ããããæ¸ãæããããã¨ãã« get
㨠set
ãå¼ã°ãã¾ãããããã®ã¡ã½ãããå¤ãä¿æããããã«å¤æ°ã使ã£ã¦ããã¨ããã¹ã¦ã®ãªãã¸ã§ã¯ãããã®å¤ãå
±æãããã¨ã«ãªãã¾ãã
function MyClass() {}
let value;
Object.defineProperty(MyClass.prototype, "x", {
get() {
return value;
},
set(x) {
value = x;
},
});
const a = new MyClass();
const b = new MyClass();
a.x = 1;
console.log(b.x); // 1
ãã®åé¡ãåé¿ããæ¹æ³ã¯å¤ãå¥ã®ããããã£ã§ä¿æãããã¨ã§ããget
㨠set
ã¡ã½ããå
ã§ this
ã¯ã¢ã¯ã»ã¹ï¼å¤æ´ããããã¨ãã¦ããããããã£ãç´ãããªãã¸ã§ã¯ããæãã¦ãã¾ãã
function MyClass() {}
Object.defineProperty(MyClass.prototype, "x", {
get() {
return this.storedX;
},
set(x) {
this.storedX = x;
},
});
const a = new MyClass();
const b = new MyClass();
a.x = 1;
console.log(b.x); // undefined
ã¢ã¯ã»ãµã¼ããããã£ã¨ã¯éãããã¼ã¿ããããã£ã¯å¸¸ã«ãªãã¸ã§ã¯ãèªèº«ã«æ ¼ç´ãããã®ã§ãã£ã¦ããããã¿ã¤ãã«æ ¼ç´ãããããã§ã¯ããã¾ãããããããæ¸ãè¾¼ã¿ä¸å¯è½ãªãã¼ã¿ããããã£ãç¶æ¿ãã¦ããå ´åãç¶æ¿å ãªãã¸ã§ã¯ãã§ãæ¸ãæãã¯é»æ¢ããã¾ãã
function MyClass() {}
MyClass.prototype.x = 1;
Object.defineProperty(MyClass.prototype, "y", {
writable: false,
value: 1,
});
const a = new MyClass();
a.x = 2;
console.log(a.x); // 2
console.log(MyClass.prototype.x); // 1
a.y = 2; // ç¡è¦ããã¾ãã峿 ¼ã¢ã¼ãã§ã¯ã¨ã©ã¼ãçºçãã¾ã
console.log(a.y); // 1
console.log(MyClass.prototype.y); // 1
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4