Baseline Widely available
extends
ãã¼ã¯ã¼ãã¯ãã¯ã©ã¹å®£è¨ãã¯ã©ã¹å¼ã®ä¸ã§ãä»ã®ã¯ã©ã¹ã®åã§ããã¯ã©ã¹ãçæããããã«ä½¿ç¨ãã¾ãã
class DateFormatter extends Date {
getFormattedDate() {
const months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
return `${this.getDate()}-${months[this.getMonth()]}-${this.getFullYear()}`;
}
}
console.log(new DateFormatter("August 19, 1975 23:15:30").getFormattedDate());
// Expected output: "19-Aug-1975"
æ§æ
class ChildClass extends ParentClass { /* ⦠*/ }
ParentClass
ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ï¼ã¯ã©ã¹ãå«ãï¼ã¾ã㯠null
ã¨è©ä¾¡ãããå¼ã
extends
ãã¼ã¯ã¼ãã¯ãçµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã¨åæ§ã«ã«ã¹ã¿ã ã¯ã©ã¹ããµãã¯ã©ã¹åããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
new
ã§å¼ã³åºããã¨ãã§ãã prototype
ããããã£ãæã¤ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ããã°ã親ã¯ã©ã¹ã®åè£ã«ãªããã¨ãã§ãã¾ããä¾ãã°ããã¤ã³ãæ¸ã¿é¢æ°ã Proxy
ã¯æ§ç¯å¯è½ã§ãããããã㯠prototype
ããããã£ãæããªãã®ã§ããµãã¯ã©ã¹åã§ãã¾ããã
function OldStyleClass() {
this.someProperty = 1;
}
OldStyleClass.prototype.someMethod = function () {};
class ChildClass extends OldStyleClass {}
class ModernClass {
someProperty = 1;
someMethod() {}
}
class AnotherChildClass extends ModernClass {}
ParentClass
ã® prototype
ããããã£ã¯ Object
ã¾ã㯠null
ã§ãªããã°ãªãã¾ãããããªãã¸ã§ã¯ãã§ãªã prototype
ã¯æ¬æ¥ã®åä½ãããªãã®ã§ãå®éã«ã¯ã»ã¨ãã©æ°ã«ãããã¨ã¯ãªãã§ããããï¼new
æ¼ç®åã§ã¯ç¡è¦ããã¾ããï¼
function ParentClass() {}
ParentClass.prototype = 3;
class ChildClass extends ParentClass {}
// Uncaught TypeError: Class extends value does not have valid prototype property 3
console.log(Object.getPrototypeOf(new ParentClass()));
// [Object: null prototype] {}
// Not actually a number!
extends
㯠ChildClass
㨠ChildClass.prototype
ã®ä¸¡æ¹ã®ãããã¿ã¤ããè¨å®ãã¾ãã
ChildClass
ã®ãããã¿ã¤ã ChildClass.prototype
ã®ãããã¿ã¤ã extends
ç¯ããªã Function.prototype
Object.prototype
extends null
Function.prototype
null
extends ParentClass
ParentClass
ParentClass.prototype
class ParentClass {}
class ChildClass extends ParentClass {}
// éçããããã£ã®ç¶æ¿ãå¯è½
Object.getPrototypeOf(ChildClass) === ParentClass;
// ã¤ã³ã¹ã¿ã³ã¹ããããã£ã®ç¶æ¿ãå¯è½
Object.getPrototypeOf(ChildClass.prototype) === ParentClass.prototype;
extends
ã®å³è¾ºã¯èå¥åã§ããå¿
è¦ã¯ããã¾ãããã³ã³ã¹ãã©ã¯ã¿ã¼ã¨ãã¦è©ä¾¡ãããå¼ãªãä½ã§ã使ç¨ãããã¨ãã§ãã¾ããããã¯ããã¯ã¹ã¤ã³ã使ããã®ã«æçãªãã¨ãå¤ãã§ãã extends
å¼ã® this
å¤ã¯ã¯ã©ã¹å®ç¾©ã®å¤å´ã® this
ã§ããããã®ã¯ã©ã¹ã¯åæåããã¦ããªãã®ã§ãã¯ã©ã¹åãåç
§ãã㨠ReferenceError
ã«ãªãã¾ãããã®å¼ã§ã¯ await
ããã³ yield
ã¯æå¾
éãã«åä½ãã¾ãã
class SomeClass extends class {
constructor() {
console.log("åºåºã¯ã©ã¹");
}
} {
constructor() {
super();
console.log("æ´¾çã¯ã©ã¹");
}
}
new SomeClass();
// åºåºã¯ã©ã¹
// æ´¾çã¯ã©ã¹
åºåºã¯ã©ã¹ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ããä½ããã®ãã®ãè¿ããã¨ãã§ãã¾ãããæ´¾çã¯ã©ã¹ã¯ãªãã¸ã§ã¯ããè¿ãã undefined
ãè¿ããªããã°ãªãã¾ããã
class ParentClass {
constructor() {
return 1;
}
}
console.log(new ParentClass()); // ParentClass {}
// ãªãã¸ã§ã¯ãã§ã¯ãªããããè¿å¤ã¯ç¡è¦ããã
// ããã¯é¢æ°ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨æ´åãã
class ChildClass extends ParentClass {
constructor() {
super();
return 1;
}
}
console.log(new ChildClass()); // TypeError: Derived constructors may only return object or undefined
親ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ããªãã¸ã§ã¯ããè¿ãå ´åãã¯ã©ã¹ãã£ã¼ã«ããããã«åæåããã¨ãã«ããã®ãªãã¸ã§ã¯ããæ´¾çã¯ã©ã¹ã® this
å¤ã¨ãã¦ä½¿ç¨ããã¾ãããã®ããªãã¯ã¯ãè¿å¤ã®ä¸æ¸ããã¨å¼ã°ããæ´¾çã¯ã©ã¹ã®ãã£ã¼ã«ãï¼ãã©ã¤ãã¼ããã£ã¼ã«ããå«ãï¼ãç¡é¢ä¿ãªãªãã¸ã§ã¯ãã«å®ç¾©ãããã¨ãã§ãã¾ãã
è¦å: æ¨æºåå§å¡ä¼ã¯ãããã¾ã§ã®ä»æ§ã«ãã£ãçµã¿è¾¼ã¿ã¯ã©ã¹ã«ããããµãã¯ã©ã¹åã¡ã«ããºã ã¯éå°ã«è¨è¨ããã¦ãããããã©ã¼ãã³ã¹ã¨ã»ãã¥ãªãã£ã¸ã®ç¡è¦ã§ããªãå½±é¿ãçºçããã¦ããã¨ããè¦è§£ãåºãã¾ãããæ°ããçµã¿è¾¼ã¿ã¡ã½ããã¯ãµãã¯ã©ã¹ã«ã¤ãã¦ãã¾ãèæ ®ããã¦ããããã¨ã³ã¸ã³ã®å®è£ è ã¯ä¸é¨ã®ãµãã¯ã©ã¹åã¡ã«ããºã ãé¤å»ãããã©ãã調æ»ãã¦ãã¾ããçµã¿è¾¼ã¿ã¯ã©ã¹ãæ¡å¼µããéã«ã¯ãç¶æ¿ã®ä»£ããã«ã³ã³ãã¸ã·ã§ã³ã使ç¨ãããã¨ãæ¤è¨ãã¦ãã ããã
ã¯ã©ã¹ãæ¡å¼µããéã«æå¾ ããããã¨ãããã¤ã示ãã¾ãã
Promise.resolve()
ã Array.from()
ï¼ããµãã¯ã©ã¹ã§å¼ã³åºããå ´åãè¿ãããã¤ã³ã¹ã¿ã³ã¹ã常ã«ãµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã«ãªããã¨ãPromise.prototype.then()
ã Array.prototype.map()
ãªã©ï¼ããµãã¯ã©ã¹ã§å¼ã³åºããå ´åãè¿ãããã¤ã³ã¹ã¿ã³ã¹ã¯å¸¸ã«ãµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã«ãªããã¨ãPromise
ã®ãµãã¯ã©ã¹ã®å ´åã then()
ããªã¼ãã¼ã©ã¤ãããã¨ãèªåçã« catch()
ã®åä½ãå¤åãããã¨ãã¾ãã¯ã Map
ã®ãµãã¯ã©ã¹ã®å ´åã set()
ããªã¼ãã¼ã©ã¤ãããã¨ã Map()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã®åä½ãèªåçã«å¤æ´ããããã¨ãããããä¸è¨ã®ãããªæå¾ ãé©åã«å®è£ ããã«ã¯ãåªãªãã¬åªåãå¿ è¦ã§ãã
this
ã®å¤ãèªã¿åããã¨ãè¦æ±ããããã¨ã§ãããã㯠[p1, p2, p3].map(Promise.resolve)
ã Promise.resolve
å
ã® this
ãæªå®ç¾©ã§ããããã«ã¨ã©ã¼ãçºçãããã¨ã«ãªãã¾ãããããä¿®æ£ããæ¹æ³ã¨ãã¦ã¯ã Array.from()
ãããã§ããããã«ã this
ãã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãªãå ´åã«åºåºã¯ã©ã¹ã§ä»£æ¿å¦çããããã¨ã§ãããããã§ãåºåºã¯ã©ã¹ãç¹æ®ã±ã¼ã¹ã§ãããã¨ãæå³ãã¦ãã¾ããthis.constructor
ãèªã¿è¾¼ããã¨ãè¦æ±ããããã¨ã§ããããããã³ã³ã¹ãã©ã¯ã¿ã¼ã®ããããã£ã¯æ¸ãè¾¼ã¿ã¨è¨å®ã®ä¸¡æ¹ãå¯è½ã§ãããä¿è·ããã¦ããªãããã new this.constructor()
ã¯å¤ãã³ã¼ããå£ãå¯è½æ§ãããã¾ãããã®ãããçµã¿è¾¼ã¿ã¡ã½ãããã³ãã¼ããå ´åã®å¤ãã¯ã代ããã«ã³ã³ã¹ãã©ã¯ã¿ã¼ã® [Symbol.species]
ããããã£ã使ç¨ãã¦ãã¾ãï¼æ¢å®ã§ã¯ãåã«ã³ã³ã¹ãã©ã¯ã¿ã¼èªèº«ã§ãã this
ãè¿ãã¾ãï¼ããããã [Symbol.species]
ã«ãã£ã¦ä»»æã®ã³ã¼ããå®è¡ããããä»»æã®ã¿ã¤ãã®ã¤ã³ã¹ã¿ã³ã¹ã使ããããããã¨ãã§ãããããã»ãã¥ãªãã£ä¸ã®åé¡ãããããµãã¯ã©ã¹ã®æå³ã¥ããé常ã«è¤éã«ãªãã¾ããMap()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã x è¦ç´ ã®å復å¯è½ãªãã¸ã§ã¯ãã§å¼ã³åºãããå ´åãå
é¨ã¹ãã¬ã¼ã¸ã«è¦ç´ ãã³ãã¼ããã ãã§ã¯ãªããç®ã«è¦ãã形㧠set()
ã¡ã½ããã x åå¼ã³åºããªããã°ãªãã¾ããããããã®åé¡ã¯çµã¿è¾¼ã¿ã¯ã©ã¹ã«åºæã®ãã®ã§ã¯ããã¾ãããèªåèªèº«ã§ä½æããã¯ã©ã¹ã«ã¤ãã¦ããåããããªæ±ºå®ãããªããã°ãªããªããã¨ãããã§ããããããããçµã¿è¾¼ã¿ã¯ã©ã¹ã§ã¯ãæé©åã¨ã»ãã¥ãªãã£ããã大ããªé¢å¿äºã§ããæ°ããçµã¿è¾¼ã¿ã¡ã½ããã¯å¸¸ã«åºåºã¯ã©ã¹ãæ§ç¯ããå¯è½ãªéãããã¤ãã®ã«ã¹ã¿ã ã¡ã½ãããå¼ã³åºãã¾ããä¸è¨ã®æå¾ å¤ãéæããªããçµã¿è¾¼ã¿ã¯ã©ã¹ããµãã¯ã©ã¹åãããå ´åã¯ãæ¢å®å¤ã®åä½ãçµã¿è¾¼ã¾ãã¦ããã¡ã½ããããã¹ã¦ãªã¼ãã¼ã©ã¤ãããå¿ è¦ãããã¾ããæ¢å®ã§ã¯ç¶æ¿ããã¦ãããããåºåºã¯ã©ã¹ã«æ°ããã¡ã½ããã追å ããã¨ããµãã¯ã©ã¹ã®æå³ã¥ããå´©ããå¯è½æ§ãããã¾ãããããã£ã¦ãçµã¿è¾¼ã¿ã¯ã©ã¹ãæ¡å¼µããããã®ããè¯ãæ¹æ³ã¯ãã³ã³ãã¸ã·ã§ã³ ã使ç¨ãããã¨ã§ãã
null ãæ¡å¼µextends null
ã¯ãObject.prototype
ãç¶æ¿ããªããªãã¸ã§ã¯ããç°¡åã«ä½æã§ããããã«ããããã«è¨è¨ããã¾ãããããããã³ã³ã¹ãã©ã¯ã¿ã¼å
ã§ super()
ãå¼ã³åºãã¹ããã©ãããæªç¢ºå®ãªããããªãã¸ã§ã¯ããè¿ããªãã³ã³ã¹ãã©ã¯ã¿ã¼ã®å®è£
ã使ç¨ãã¦ãå®éã«ãã®ãããªã¯ã©ã¹ãæ§ç¯ãããã¨ã¯å¯è½ã§ã¯ããã¾ããã TC39 å§å¡ä¼ã¯ãã®æ©è½ãåã³ä½¿ããããã«ããããã«ä½æ¥ãã¦ãã¾ãã
new (class extends null {})();
// TypeError: Super constructor null of anonymous class is not a constructor
new (class extends null {
constructor() {}
})();
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
new (class extends null {
constructor() {
super();
}
})();
// TypeError: Super constructor null of anonymous class is not a constructor
代ããã«ãã³ã³ã¹ãã©ã¯ã¿ã¼ããæç¤ºçã«ã¤ã³ã¹ã¿ã³ã¹ãè¿ãå¿ è¦ãããã¾ãã
class NullClass extends null {
constructor() {
// new.target ã使ç¨ãããã¨ã§ãæ´¾çã¯ã©ã¹ãæ£ãããããã¿ã¤ããã§ã¼ã³ã
// æã¤ãã¨ãã§ãã
return Object.create(new.target.prototype);
}
}
const proto = Object.getPrototypeOf;
console.log(proto(proto(new NullClass()))); // null
ä¾ extends ã®ä½¿ç¨
æåã®ä¾ã§ã¯ã Square
ã¨å¼ã°ããã¯ã©ã¹ã Polygon
ã¨å¼ã°ããã¯ã©ã¹ãã使ãã¾ãããã®ä¾ã¯ãã©ã¤ããã¢ï¼ã½ã¼ã¹ï¼ãã転è¼ãã¦ãã¾ãã
class Square extends Polygon {
constructor(length) {
// ããã§ã¯ã親ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãå¼ã³åºãã
// Polygon ã®å¹
ã¨é«ãã®å¯¸æ³ã渡ãã¾ãã
super(length, length);
// 注: æ´¾çã¯ã©ã¹ã§ã¯ã 'this' ã使ãåã« super() ã
// å¼ã³åºããªãã¦ã¯ãªãã¾ããããããªãã¨åç
§ã¨ã©ã¼ã«ãªãã¾ãã
this.name = "Square";
}
get area() {
return this.height * this.width;
}
}
ãã¬ã¼ã³ãªãªãã¸ã§ã¯ãã®æ¡å¼µ
ã¯ã©ã¹ã¯é常ã®ï¼æ§ç¯ä¸å¯è½ãªï¼ãªãã¸ã§ã¯ããç¶æ¿ãããã¨ã¯ã§ãã¾ããããã®ãªãã¸ã§ã¯ãã®ãã¹ã¦ã®ããããã£ãç¶æ¿ããã¤ã³ã¹ã¿ã³ã¹ã§å©ç¨ã§ããããã«ãã¦ãé常ã®ãªãã¸ã§ã¯ããç¶æ¿ãããå ´åã¯ã代ããã« Object.setPrototypeOf()
ã使ç¨ãããã¨ãã§ãã¾ãã
const Animal = {
speak() {
console.log(`${this.name}ãé³´ãã¾ãã`);
},
};
class Dog {
constructor(name) {
this.name = name;
}
}
Object.setPrototypeOf(Dog.prototype, Animal);
const d = new Dog("ãããã¼");
d.speak(); // ãããã¼ãé³´ãã¾ãã
çµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã§ã® extends ã®ä½¿ç¨
ãã®ä¾ã§ã¯ãçµã¿è¾¼ã¿ã® Date
ãªãã¸ã§ã¯ããæ¡å¼µãã¾ãããã®ä¾ã¯ãã©ã¤ãã㢠(ã½ã¼ã¹) ãã転è¼ãã¦ãã¾ãã
class MyDate extends Date {
getFormattedDate() {
const months = [
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
];
return `${this.getDate()}-${months[this.getMonth()]}-${this.getFullYear()}`;
}
}
Object
ã®æ¡å¼µ
JavaScript ã®ãªãã¸ã§ã¯ãã¯ãã¹ã¦æ¢å®ã§ã¯ Object.prototype
ãç¶æ¿ãã¦ããã®ã§ãä¸è¦ãã㨠extends Object
ã¨æ¸ãã®ã¯åé·ã«è¦ãã¾ãã extends
ãã¾ã£ããæ¸ããªãå ´åã¨ç°ãªãå½¢ã§è¨ãã°ãã³ã³ã¹ãã©ã¯ã¿ã¼èªä½ã Object.keys()
ã®ãããªéçã¡ã½ããã Object
ããç¶æ¿ãã¦ãããã¨ãããã§ããããããã©ã® Object
ã®éçã¡ã½ããã this
ã®å¤ã使ç¨ãã¦ããªãããããããã®éçã¡ã½ãããç¶æ¿ãããã¨ã«æçãªå¤ã¯ããã¾ããã
Object()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãµãã¯ã©ã¹ã®ã·ããªãªãç¹æ®åãã¾ãã super()
ã«ãã£ã¦æé»çã«å¼ã³åºãããå ´åã常㫠new.target.prototype
ããããã¿ã¤ãã¨ããæ°ãããªãã¸ã§ã¯ããåæåãã¾ãã super()
ã«æ¸¡ãå¤ã¯ç¡è¦ããã¾ãã
class C extends Object {
constructor(v) {
super(v);
}
}
console.log(new C(1) instanceof Number); // false
console.log(C.keys({ a: 1, b: 2 })); // [ 'a', 'b' ]
ãã®åä½ãããµãã¯ã©ã¹ãç¹æ®åããªãã«ã¹ã¿ã ã©ããã¼ã¨æ¯è¼ãã¦ã¿ã¦ãã ããã
function MyObject(v) {
return new Object(v);
}
class D extends MyObject {
constructor(v) {
super(v);
}
}
console.log(new D(1) instanceof Number); // true
species
æ´¾çé
åã¯ã©ã¹ MyArray
ã§ Array
ãªãã¸ã§ã¯ããè¿ãããå ´åãããã¾ãã species ãã¿ã¼ã³ã使ãã¨ãæ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã䏿¸ããããã¨ãã§ãã¾ãã
ä¾ãã°ãArray.prototype.map()
ã®ãããªæ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¡ã½ããã使ç¨ããå ´åããããã®ã¡ã½ãã㯠MyArray
ãªãã¸ã§ã¯ãã®ä»£ããã«ã親㮠Array
ãªãã¸ã§ã¯ããè¿ãããã«ãã¾ããã·ã³ãã« Symbol.species
ã使ç¨ããã¨ããããè¡ããã¨ãã§ãã¾ãã
class MyArray extends Array {
// 親㮠Array ã³ã³ã¹ãã©ã¯ã¿ã¼ã® species ã䏿¸ã
static get [Symbol.species]() {
return Array;
}
}
const a = new MyArray(1, 2, 3);
const mapped = a.map((x) => x * x);
console.log(mapped instanceof MyArray); // false
console.log(mapped instanceof Array); // true
ãã®åä½ã¯ãå¤ãã®çµã¿è¾¼ã¿ã³ãã¼ã¡ã½ããã§å®è£ ããã¦ãã¾ãããã®æ©è½ã®æ³¨æç¹ã«ã¤ãã¦ã¯ãçµã¿è¾¼ã¿ã¯ã©ã¹ã®ãµãã¯ã©ã¹åã®èª¬æãåç §ãã¦ãã ããã
ããã¯ã¹ã¤ã³æ½è±¡ãµãã¯ã©ã¹ã¾ãã¯ããã¯ã¹ã¤ã³ã¯ãã¯ã©ã¹ã®ãã³ãã¬ã¼ãã§ããã¯ã©ã¹ã¯ã¹ã¼ãã¼ã¯ã©ã¹ã 1 ã¤ããæã¤ãã¨ãã§ããªãã®ã§ãä¾ãã°ãã¼ã«ã¯ã©ã¹ããã®å¤éç¶æ¿ã¯ä¸å¯è½ã§ããæ©è½ã¯ã¹ã¼ãã¼ã¯ã©ã¹ãæä¾ããªããã°ãªãã¾ããã
ã¹ã¼ãã¼ã¯ã©ã¹ãå ¥åã¨ãããã®ã¹ã¼ãã¼ã¯ã©ã¹ãæ¡å¼µãããµãã¯ã©ã¹ãåºåã¨ãã颿°ããããã¯ã¹ã¤ã³ãå®è£ ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
const calculatorMixin = (Base) =>
class extends Base {
calc() {}
};
const randomizerMixin = (Base) =>
class extends Base {
randomize() {}
};
ãããã®ããã¯ã¹ã¤ã³ã使ç¨ããã¯ã©ã¹ã¯ã次ã®ããã«æ¸ããã¨ãã§ãã¾ãã
class Foo {}
class Bar extends calculatorMixin(randomizerMixin(Foo)) {}
ç¶æ¿ãé¿ãã
ãªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ã«ããã¦ãç¶æ¿ã¯ã¨ã¦ãå¼·ãçµåé¢ä¿ã§ããããã¯åºåºã¯ã©ã¹ã®ãã¹ã¦ã®æ¯ãèããæ¢å®ã§ãµãã¯ã©ã¹ã«ç¶æ¿ããããã¨ãæå³ãã¾ããä¾ãã°ã ReadOnlyMap
ã®å®è£
ãèãã¦ã¿ã¾ãããã
class ReadOnlyMap extends Map {
set() {
throw new TypeError("A read-only map must be set at construction time.");
}
}
Map()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ã¤ã³ã¹ã¿ã³ã¹ã® set()
ã¡ã½ãããå¼ã³åºãããã§ãã
const m = new ReadOnlyMap([["a", 1]]); // TypeError: A read-only map must be set at construction time.
ã¤ã³ã¹ã¿ã³ã¹ãæ§ç¯æ¸ã¿ãã©ããã示ãããã«ãã©ã¤ãã¼ããªãã©ã°ã使ç¨ãããã¨ã§ããããåé¿ãããã¨ãã§ãã¾ãããããããã®è¨è¨ã®ããé大ãªåé¡ã¯ããªã¹ã³ãã®ç½®æååãç ´ã£ã¦ãã¾ããã¨ã§ããããã¯ããµãã¯ã©ã¹ã¯ã¹ã¼ãã¼ã¯ã©ã¹ã¨ç½®æå¯è½ã§ããã¹ãã ã¨ããç¶æ
ã§ãããã颿°ã Map
ãªãã¸ã§ã¯ããæå¾
ããã®ã§ããã°ã ReadOnlyMap
ãªãã¸ã§ã¯ãã使ç¨ãããã¨ãã§ããã¯ãã§ãã
ç¶æ¿ã¯ãã°ãã°å-æ¥ååé¡ãå¼ãèµ·ããã¾ãããªããªããã©ã¡ãã®åããå¤ãã®å ±éã®ç¹å¾´ãå ±æãã¦ããã«ãããããããä»ã®åã®æ¯ãèããå®å ¨ã«å å ãã¦ããªãããã§ããä¸è¬çã«ãç¶æ¿ã使ç¨ããã¨ã¦ãããçç±ããªãéãã代ããã«ã³ã³ãã¸ã·ã§ã³ã使ç¨ããæ¹ãããã§ããããã³ã³ãã¸ã·ã§ã³ã¨ã¯ãããã¯ã©ã¹ãä»ã®ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã¸ã®åç §ãæã£ã¦ãã¦ããã®ãªãã¸ã§ã¯ããå®è£ ã®è©³ç´°ã¨ãã¦ã®ã¿ä½¿ç¨ãã¦ãããã¨ãæå³ãã¦ãã¾ãã
class ReadOnlyMap {
#data;
constructor(values) {
this.#data = new Map(values);
}
get(key) {
return this.#data.get(key);
}
has(key) {
return this.#data.has(key);
}
get size() {
return this.#data.size;
}
*keys() {
yield* this.#data.keys();
}
*values() {
yield* this.#data.values();
}
*entries() {
yield* this.#data.entries();
}
*[Symbol.iterator]() {
yield* this.#data[Symbol.iterator]();
}
}
ãã®å ´åã ReadOnlyMap
ã¯ã©ã¹ã¯ Map
ã®ãµãã¯ã©ã¹ã§ã¯ããã¾ããããåãã¡ã½ãããå®è£
ãã¦ãã¾ããããã¯ã³ã¼ãã®éè¤ãæå³ãã¾ããã ReadOnlyMap
ã¯ã©ã¹ã¯ Map
ã¯ã©ã¹ã¨å¼·ãå²ãå½ã¦ããã¦ããããã§ã¯ãªãã Map
ã¯ã©ã¹ã夿´ããã¦ãç°¡åã«å£ãããã¨ã¯ããã¾ãããä¾ãã°ã Map
ã¯ã©ã¹ã set()
ãå¼ã³åºããªã emplace()
ã¡ã½ããã追å ããå ´åãå¾è
ã emplace()
ããªã¼ãã¼ã©ã¤ãããããã«æ´æ°ãããªãéãã ReadOnlyMap
ã¯ã©ã¹ã¯èªã¿åãå°ç¨ã§ã¯ãªããªãã¾ããããã«ãReadOnlyMap
ãªãã¸ã§ã¯ã㯠set
ã¡ã½ããããã¹ã¦æããªãã®ã§ãå®è¡æã«ã¨ã©ã¼ãçºçãããããæ£ç¢ºã§ãã
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