鿍奍;: ãã®æ©è½ã¯éæ¨å¥¨ã«ãªãã¾ãããã¾ã 対å¿ãã¦ãããã©ã¦ã¶ã¼ãããããããã¾ãããããã§ã«é¢é£ããã¦ã§ãæ¨æºããåé¤ããã¦ããããåé¤ã®æç¶ãä¸ã§ããããäºææ§ã®ããã ãã«æ®ããã¦ããå¯è½æ§ãããã¾ãã使ç¨ãé¿ããã§ããã°æ¢åã®ã³ã¼ãã¯æ´æ°ãã¦ãã ããããã®ãã¼ã¸ã®ä¸é¨ã«ããäºææ§ä¸è¦§è¡¨ãè¦ã¦å¤æãã¦ãã ããããã®æ©è½ã¯çªç¶åä½ããªããªãå¯è½æ§ããããã¨ã«æ³¨æãã¦ãã ããã
ã¡ã¢: with
æã®ä½¿ç¨ã¯æ¨å¥¨ããã¾ãããæ··ä¹±ãæããã°ãäºææ§åé¡ã®åå ã¨ãªãå¯è½æ§ããããæé©åãã§ããªããªãã峿 ¼ã¢ã¼ãã§ã¯ç¦æ¢ããã¦ããããã§ããæ¨å¥¨ãããä»£æ¿æ¡ã¯ãããããã£ãã¢ã¯ã»ã¹ããããªãã¸ã§ã¯ãã䏿夿°ã«å²ãå½ã¦ããã¨ã§ãã
with
æã¯ãæã«å¯¾ããã¹ã³ã¼ããã§ã¼ã³ãæ¡å¼µãã¾ãã
with (expression)
statement
expression
æãè©ä¾¡ããã¨ãã«ä½¿ãããã¹ã³ã¼ããã§ã¼ã³ã«ãä¸ãããããªãã¸ã§ã¯ãã追å ãã¾ãããªãã¸ã§ã¯ãã®å¨ãã®æ¬å¼§ã¯å¿ é ã§ãã
statement
ä»»æã®æãè¤æ°ã®æãå®è¡ããããã«ã¯ããããã®æãã°ã«ã¼ãåããããã«ãããã¯æï¼{ ... }
ï¼ã使ã£ã¦ãã ããã
èå¥åã«ã¯ã修飾èå¥åã¨é修飾èå¥åã® 2 種é¡ãããã¾ããé修飾èå¥åã¯ãã©ãããæ¥ãã®ãã示ããªããã®ã§ãã
foo; // é修飾èå¥å
foo.bar; // bar ã¯ä¿®é£¾èå¥å
é常ãé修飾èå¥åã¯ããã®ååãæã¤å¤æ°ãã¹ã³ã¼ããã§ã¼ã³ã§æ¤ç´¢ãããã¨ã§è§£æ±ºãã修飾èå¥åã¯ããã®ååãæã¤ããããã£ããªãã¸ã§ã¯ãã®ãããã¿ã¤ããã§ã¼ã³ã§æ¤ç´¢ãããã¨ã§è§£æ±ºãã¾ãã
const foo = { bar: 1 };
console.log(foo.bar);
// foo ã¯å¤æ°ã¨ãã¦ã¹ã³ã¼ããã§ã¼ã³å
ã§è¦ã¤ããã
// bar 㯠foo ã®ä¸ã§ããããã£ã¨ãã¦è¦ã¤ããã
ä¾å¤ã¨ãã¦ãã°ãã¼ãã«ãªãã¸ã§ã¯ãã¯ãã¹ã³ã¼ããã§ã¼ã³ã®æä¸ä½ã«ä½ç½®ãããã®ããããã£ã¯èªåçã«ã°ãã¼ãã«å¤æ°ã«ãªãã修飾åãªãã§åç §ãããã¨ãã§ãã¾ãã
console.log(globalThis.Math === Math); // true
with
æã¯ããã®ææ¬ä½ã®è©ä¾¡ã®éããã®ã¹ã³ã¼ããã§ã¼ã³ã®å
é ã«ãä¸ãããããªãã¸ã§ã¯ãã追å ãã¾ãããã¹ã¦ã®é修飾åã¯ãä¸ä½ã¹ã³ã¼ããã§ã¼ã³ã§æ¤ç´¢ãããåã«ãã¾ããªãã¸ã§ã¯ãå
ã§ï¼in
ãã§ãã¯ãä»ãã¦ï¼æ¤ç´¢ããã¾ãã
é修飾åç
§ããªãã¸ã§ã¯ãã®ã¡ã½ãããåç
§ããå ´åããã®ã¡ã½ããã¯ãã®ãªãã¸ã§ã¯ãã this
å¤ã¨ãã¦å¼ã³åºããããã¨ã«æ³¨æãã¦ãã ããã
with ([1, 2, 3]) {
console.log(toString()); // 1,2,3
}
ãªãã¸ã§ã¯ã㯠@@unscopables
ããããã£ãæã¤ãã¨ãã§ãã¾ãããããã¯ã¹ã³ã¼ããã§ã¼ã³ã«ï¼å¾æ¹äºææ§ã®ããã«ï¼è¿½å ãã¦ã¯ãªããªãããããã£ã®ãªã¹ããå®ç¾©ãããã®ã§ãã詳細㯠Symbol.unscopables
ã®ããã¥ã¡ã³ããåç
§ãã¦ãã ããã
with
æã使ç¨ããçç±ã¯ã䏿夿°ã 1 ã¤ç¯ç´ããããã¨ãé·ããªãã¸ã§ã¯ãåç
§ãç¹°ãè¿ããã¨ãé¿ããããã«ãã¡ã¤ã«ãµã¤ãºã縮å°ããããã§ããããããwith
æã好ã¾ãããªãçç±ã¯ãã£ã¨ããããããã¾ãã
ããã©ã¼ãã³ã¹: with
æã¯ããã¹ã¦ã®ååæ¤ç´¢ã«ããã¦ãæå®ãããªãã¸ã§ã¯ããæåã«æ¤ç´¢ãããã¨ãå¼·å¶ãã¾ãããããã£ã¦ãæå®ãããªãã¸ã§ã¯ãã®ã¡ã³ãã¼ã§ãªãèå¥åã¯ãã¹ã¦ãwith
ãããã¯ã®ä¸ã§è¦ã¤ããã®ãããé
ããªãã¾ããããã«ããªããã£ãã¤ã¶ã¼ã¯ããããã®é修飾èå¥åãä½ãåç
§ãã¦ããã®ãã«ã¤ãã¦ä»®å®ãããã¨ãã§ããªããããèå¥åã使ç¨ãããã³ã«åãããããã£ã®æ¤ç´¢ãç¹°ãè¿ããªããã°ãªãã¾ããã
å¯èªæ§: with
æã«ããã人éã®èªã¿æã JavaScript ã³ã³ãã¤ã©ã¼ã«ã¨ã£ã¦ã修飾ããã¦ããªãååãã¹ã³ã¼ããã§ã¼ã³ã§è¦ã¤ãããã©ãããè¦ã¤ããã¨ãããã©ã®ãªãã¸ã§ã¯ãã§è¦ã¤ãããããã夿ããã®ãé£ãããªãã¾ãã以ä¸ã®ä¾ãè¦ã¦ãã ããã
function f(x, o) {
with (o) {
console.log(x);
}
}
f
ã®å®ç¾©ã ããè¦ã¦ããã¨ãwith
æ¬ä½ã®x
ãä½ãåç
§ãã¦ããã®ãããããã¾ãããf
ãå¼ã³åºããã¦åãã¦ãx
ã o.x
ã§ããããf
ã®æåã®å½¢å¼å¼æ°ã§ãããã夿ãããã¨ãã§ãã¾ããããã2 ã¤ç®ã®å¼æ°ã¨ãã¦æ¸¡ããªãã¸ã§ã¯ãã§ x
ãå®ç¾©ãå¿ãã¦ããã¨ã©ã¼ã¯çºçãã¾ãããããã®ä»£ããã«äºæãã¬çµæãçºçãã¾ããã¾ãããã®ãããªã³ã¼ããå®éã«ã©ã®ãããªæå³ãæã£ã¦ããã®ãã䏿ã§ãã
åæ¹äºææ§: with
ã使ç¨ããã³ã¼ãã¯ãåæ¹äºææ§ããªãå¯è½æ§ãããã¾ããç¹ã«ãå°æ¥çã«è¤æ°ã®ããããã£ãæã¤ããã«ãªããããããªãããã¬ã¼ã³ãªãã¸ã§ã¯ã以å¤ã§ä½¿ç¨ããå ´åã§ããæ¬¡ã®ãããªä¾ãèãã¦ã¿ã¾ãããã
function f(foo, values) {
with (foo) {
console.log(values);
}
}
ECMAScript 5 ç°å¢ã§ f([1, 2, 3], obj)
ãå¼ã³åºãã¨ãwith
æã®ä¸ã«ãã values
ã®åç
§å
㯠obj
ã«è§£æ±ºããã¾ããã¨ããããECMAScript 2015 ã§ã¯ values
ããããã£ã Array.prototype
ã«å°å
¥ããã¾ãã (ãã£ã¦ããã¹ã¦ã®é
åã§ä½¿ç¨ã§ãã¾ã)ãå¾ã£ã¦ãç°å¢ãæ´æ°ããã¨ãwith
æã®å
é¨ã«ãã values
ã®åç
§å
㯠[1, 2, 3].values
ã«è§£æ±ºãããããã«ãªãããã°ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
ãã®å
·ä½çãªä¾ã§ã¯ãvalues
㯠Array.prototype[Symbol.unscopables]
ã«ãã£ã¦ã¹ã³ã¼ãä¸å¯ã¨å®ç¾©ããã¦ããã®ã§ããã¯ã values
弿°ã«æ£ãã解決ã ãã¾ãããããã¹ã³ã¼ãä¸å¯ã¨å®ç¾©ããã¦ããªããã°ããããã°ãå°é£ãªèª²é¡ã«ãªãã®ã¯ç®ã«è¦ãã¦ãã¾ãã
次㮠with
æã¯ãMath
ãªãã¸ã§ã¯ããæ¢å®ã®ãªãã¸ã§ã¯ãã§ããã¨æå®ãã¦ãã¾ããwith
æå
ã®è¤æ°ã®æã¯ããªãã¸ã§ã¯ããæå®ãããã¨ãªãã PI
ããããã£ã cos
ã¡ã½ãããããã³ sin
ã¡ã½ãããåç
§ãã¦ãã¾ããJavaScript ã¯ããããã®åç
§ã«å¯¾ã㦠Math
ãªãã¸ã§ã¯ããä»®å®ãã¾ãã
let a, x, y;
const r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
ããããã£ãç¾å¨ã®ã¹ã³ã¼ãã«æ§é åè§£ã㦠with æãé¿ãã
é常ãããããã£ã®æ§é åè§£ã«ãã£ã¦ with
ã使ç¨ããã®ãé¿ãããã¨ãã§ãã¾ããããã§ã¯ãwith
ãä½åãªã¹ã³ã¼ããä½ãåä½ã模å£ããããã«ä½åãªãããã¯ã使ãã¦ãã¾ãããå®éã®ä½¿ç¨ã§ã¯ãé常ã¯ãã®ãããã¯ãé¤å¤ãããã¨ãã§ãã¾ãã
let a, x, y;
const r = 10;
{
const { PI, cos, sin } = Math;
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
IIFE ã使ç¨ã㦠with æãé¿ãã
é·ãååã®åç §ãä½åº¦ãåå©ç¨ããªããã°ãªããªãå¼ã使ããå ´åãå¼ã®ä¸ã§ãã®é·ãååãæé¤ãããã¨ãç®çã§ããã°ãå¼ã IIFE ã§å²ã¿ãé·ãååã弿°ã¨ãã¦æä¾ãããã¨ãã§ãã¾ãã
const objectHavingAnEspeciallyLengthyName = { foo: true, bar: false };
if (((o) => o.foo && !o.bar)(objectHavingAnEspeciallyLengthyName)) {
// This branch runs.
}
with æã¨ãããã·ã¼ã使ç¨ãã¦åçãªåå空éãçæ
with
ã¯ãã¹ã¦ã®å¤æ°ã®æ¢ç´¢ãããããã£ã®æ¢ç´¢ã«å¤æããProxy ã§ã¯ãã¹ã¦ã®ããããã£ã®æ¢ç´¢ã®å¼ã³åºãããã©ãããããã¨ãã§ãã¾ããããããçµã¿åããããã¨ã§ãåçãªåå空éã使ãããã¨ãã§ãã¾ãã
const namespace = new Proxy(
{},
{
has(target, key) {
// `console` ã®ãããªã°ãã¼ãã«ããããã£ã¯ãã©ããããªã
if (key in globalThis) {
return false;
}
// ãã¹ã¦ã®ããããã£ã®åç
§ããã©ãã
return true;
},
get(target, key) {
return key;
},
},
);
with (namespace) {
console.log(a, b, c); // "a" "b" "c"
}
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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