JavaScript Decoratorã¹ããŒãž3ã®å®è£ ãã¡ã¿ããŒã¿ããã°ã©ãã³ã°ã«çŠç¹ãåœãŠãŠæ¢æ±ããŸããå®è·µçãªäŸããå©ç¹ãçè§£ããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããæ¹æ³ãçºèŠããŠãã ããã
JavaScript Decoratorã¹ããŒãž3ïŒã¡ã¿ããŒã¿ããã°ã©ãã³ã°ã®å®è£
ECMAScriptããããŒã¶ã«ããã»ã¹ã§çŸåšã¹ããŒãž3ã«ããJavaScriptãã³ã¬ãŒã¿ãŒã¯ãã¡ã¿ããã°ã©ãã³ã°ã®ããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸããããã«ãããã¯ã©ã¹ãã¡ãœãããããããã£ããã©ã¡ãŒã¿ã«ã¢ãããŒã·ã§ã³ã远å ãããã®æ¯ãèãã倿Žããããšãã§ããŸãããã®ããã°èšäºã§ã¯ããã³ã¬ãŒã¿ãŒã®å®è·µçãªå®è£ ãæ·±ãæãäžããã¡ã¿ããŒã¿ããã°ã©ãã³ã°ã掻çšããŠã³ãŒãã®æ§æãä¿å®æ§ãå¯èªæ§ãåäžãããæ¹æ³ã«çŠç¹ãåœãŠãŸããæ§ã ãªäŸãæ¢æ±ããäžçäžã®JavaScriptéçºè ã«é©çšå¯èœãªå®çšçãªæŽå¯ãæäŸããŸãã
ãã³ã¬ãŒã¿ãŒãšã¯ïŒç°¡åãªãŸãšã
ãã³ã¬ãŒã¿ãŒã®æ žå¿ã¯ãã¯ã©ã¹ãã¡ãœãããããããã£ããã©ã¡ãŒã¿ã«ã¢ã¿ããã§ãã颿°ã§ãããã³ã¬ãŒããããèŠçŽ ã«é¢ããæ å ±ãåãåããããã倿Žãããæ°ããæ¯ãèãã远å ãããããèœåãæã£ãŠããŸããããã¯å®£èšçã¡ã¿ããã°ã©ãã³ã°ã®äžåœ¢æ ã§ãããæå³ãããæç¢ºã«è¡šçŸãããã€ã©ãŒãã¬ãŒãã³ãŒããåæžããããšãã§ããŸããæ§æã¯ãŸã é²åäžã§ãããäžå¿çãªæŠå¿µã¯å€ãããŸããããã®ç®çã¯ãæ¢åã®JavaScriptã®æ§æèŠçŽ ããå ã®ãœãŒã¹ã³ãŒããçŽæ¥å€æŽããããšãªããç°¡æœã§ãšã¬ã¬ã³ããªæ¹æ³ã§æ¡åŒµã»å€æŽããææ®µãæäŸããããšã§ãã
ææ¡ãããŠããæ§æã¯ãéåžžã@ãèšå·ã§å§ãŸããŸã:
class MyClass {
@decorator
myMethod() {
// ...
}
}
ãã®`@decorator`æ§æã¯ã`myMethod`ã`decorator`颿°ã«ãã£ãŠãã³ã¬ãŒããããŠããããšã瀺ããŸãã
ã¡ã¿ããŒã¿ããã°ã©ãã³ã°ïŒãã³ã¬ãŒã¿ãŒã®æ žå¿
ã¡ã¿ããŒã¿ãšã¯ãããŒã¿ã«é¢ããããŒã¿ã®ããšã§ãããã³ã¬ãŒã¿ãŒã®æèã§ã¯ãã¡ã¿ããŒã¿ããã°ã©ãã³ã°ã«ãããã¯ã©ã¹ãã¡ãœãããããããã£ããã©ã¡ãŒã¿ã«è¿œå æ å ±ïŒã¡ã¿ããŒã¿ïŒãã¢ã¿ããããããšãã§ããŸãããã®ã¡ã¿ããŒã¿ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã§ã次ã®ãããªæ§ã ãªç®çã§å©çšã§ããŸã:
- ããªããŒã·ã§ã³
- ã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãº
- äŸåæ§æ³šå ¥
- èªå¯
- ãã®ã³ã°
- åãã§ãã¯ïŒç¹ã«TypeScriptã®å ŽåïŒ
ã¡ã¿ããŒã¿ãã¢ã¿ããããååŸããèœåã¯ãæè»ã§æ¡åŒµå¯èœãªã·ã¹ãã ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã®æè»æ§ã«ãããå ã®ã³ãŒãã倿Žããå¿ èŠããªããªããé¢å¿ã®åé¢ãä¿é²ãããŸãããã®ã¢ãããŒãã¯ãå°ççãªå Žæã«é¢ä¿ãªããããããèŠæš¡ã®ããŒã ã«ãšã£ãŠæçã§ãã
å®è£ æé ãšå®è·µäŸ
ãã³ã¬ãŒã¿ãŒã䜿çšããã«ã¯ãéåžžBabelãTypeScriptã®ãããªãã©ã³ã¹ãã€ã©ãå¿ èŠã§ãããããã®ããŒã«ã¯ãã³ã¬ãŒã¿ãŒæ§æãããã©ãŠã¶ãNode.jsç°å¢ãçè§£ã§ããæšæºã®JavaScriptã³ãŒãã«å€æããŸãã以äžã®äŸã§ã¯ãå®è·µçãªã·ããªãªã§ãã³ã¬ãŒã¿ãŒãå®è£ ããæŽ»çšããæ¹æ³ã説æããŸãã
äŸ1ïŒããããã£ã®ããªããŒã·ã§ã³
ããããã£ã®åãæ€èšŒãããã³ã¬ãŒã¿ãŒãäœæããŠã¿ãŸããããããã¯ãå€éšãœãŒã¹ããã®ããŒã¿ãæ±ãå ŽåããAPIãæ§ç¯ããéã«ç¹ã«åœ¹ç«ã¡ãŸãã以äžã®ã¢ãããŒããé©çšã§ããŸã:
- ãã³ã¬ãŒã¿ãŒé¢æ°ãå®çŸ©ããŸãã
- ãªãã¬ã¯ã·ã§ã³æ©èœã䜿çšããŠã¡ã¿ããŒã¿ã«ã¢ã¯ã»ã¹ããä¿åããŸãã
- ã¯ã©ã¹ã®ããããã£ã«ãã³ã¬ãŒã¿ãŒãé©çšããŸãã
- ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åæãŸãã¯å®è¡æã«ããããã£ã®å€ãæ€èšŒããŸãã
function validateType(type) {
return function(target, propertyKey) {
let value;
const getter = function() {
return value;
};
const setter = function(newValue) {
if (typeof newValue !== type) {
throw new TypeError(`Property ${propertyKey} must be of type ${type}`);
}
value = newValue;
};
Object.defineProperty(target, propertyKey, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
};
}
class User {
@validateType('string')
name;
constructor(name) {
this.name = name;
}
}
try {
const user1 = new User('Alice');
console.log(user1.name); // Output: Alice
const user2 = new User(123); // Throws TypeError
} catch (error) {
console.error(error.message);
}
ãã®äŸã§ã¯ã`@validateType`ãã³ã¬ãŒã¿ãŒã¯æåŸ ãããåãåŒæ°ãšããŠåãåããŸããããããã£ã®ã²ãã¿ãŒãšã»ãã¿ãŒã倿ŽããŠãåæ€èšŒããžãã¯ãå«ããŸãããã®äŸã¯ãäžçäžã®ã·ã¹ãã ã§äžè¬çã«è¡ããããå€éšãœãŒã¹ããã®ããŒã¿ãæ€èšŒããã®ã«åœ¹ç«ã€ã¢ãããŒããæäŸããŸãã
äŸ2ïŒãã®ã³ã°ã®ããã®ã¡ãœãããã³ã¬ãŒã¿ãŒ
ãã®ã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãç£èŠã«äžå¯æ¬ ã§ãããã³ã¬ãŒã¿ãŒã¯ãã¡ãœããã®ã³ã¢ããžãã¯ã倿Žããããšãªããã¡ãœããã«ãã®ã³ã°ã远å ããããã»ã¹ãç°¡çŽ åã§ããŸããæ¬¡ã®ã¢ãããŒããèããŠã¿ãŸããã:
- 颿°åŒã³åºãããã°ã«èšé²ããããã®ãã³ã¬ãŒã¿ãŒãå®çŸ©ããŸãã
- å ã®ã¡ãœããã倿ŽããŠãå®è¡ååŸã«ãã®ã³ã°ã远å ããŸãã
- ãã°ãåãããã¡ãœããã«ãã³ã¬ãŒã¿ãŒãé©çšããŸãã
function logMethod(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args) {
console.log(`[LOG] Calling method ${key} with arguments:`, args);
const result = originalMethod.apply(this, args);
console.log(`[LOG] Method ${key} returned:`, result);
return result;
};
return descriptor;
}
class MathOperations {
@logMethod
add(a, b) {
return a + b;
}
}
const math = new MathOperations();
const sum = math.add(5, 3);
console.log(sum); // Output: 8
ãã®äŸã¯ãã¡ãœããããã®ã³ã°æ©èœã§ã©ããããæ¹æ³ã瀺ããŠããŸããã¡ãœããåŒã³åºããšãã®æ»ãå€ã远跡ããããã®ãã¯ãªãŒã³ã§éªéã«ãªããªãæ¹æ³ã§ãããã®ãããªå®è·µã¯ãç°ãªããããžã§ã¯ãã«åãçµãåœéçãªããŒã ã§ãé©çšå¯èœã§ãã
äŸ3ïŒããããã£ã远å ããããã®ã¯ã©ã¹ãã³ã¬ãŒã¿ãŒ
ã¯ã©ã¹ãã³ã¬ãŒã¿ãŒã¯ãã¯ã©ã¹ã«ããããã£ãã¡ãœããã远å ããããã«å©çšã§ããŸãã以äžã«å®è·µçãªäŸã瀺ããŸã:
- æ°ããããããã£ã远å ããã¯ã©ã¹ãã³ã¬ãŒã¿ãŒãå®çŸ©ããŸãã
- ã¯ã©ã¹ã«ãã³ã¬ãŒã¿ãŒãé©çšããŸãã
- ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åãã远å ãããããããã£ã確èªããŸãã
function addTimestamp(target) {
target.prototype.timestamp = new Date();
return target;
}
@addTimestamp
class MyClass {
constructor() {
// ...
}
}
const instance = new MyClass();
console.log(instance.timestamp); // Output: Date object
ãã®ã¯ã©ã¹ãã³ã¬ãŒã¿ãŒã¯ããã³ã¬ãŒãããä»»æã®ã¯ã©ã¹ã«`timestamp`ããããã£ã远å ããŸããããã¯ãåå©çšå¯èœãªæ¹æ³ã§ã¯ã©ã¹ãæ¡åŒµããæ¹æ³ã®ã·ã³ãã«ã§å¹æçãªãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã§ããããã¯ãæ§ã ãªã°ããŒãã«ããŒã ã§äœ¿çšãããå ±æã©ã€ãã©ãªããŠãŒãã£ãªãã£æ©èœãæ±ãéã«ç¹ã«åœ¹ç«ã¡ãŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªã®å®è£
ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªã䜿çšãããšãããæè»ã§åå©çšå¯èœãªãã³ã¬ãŒã¿ãŒãäœæã§ããŸãããããã¯ãã³ã¬ãŒã¿ãŒãè¿ã颿°ã§ãããã®ã¢ãããŒãã«ããããã³ã¬ãŒã¿ãŒã«åŒæ°ãæž¡ãããšãã§ããŸãã
function makeLoggingDecorator(prefix) {
return function (target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args) {
console.log(`[${prefix}] Calling method ${key} with arguments:`, args);
const result = originalMethod.apply(this, args);
console.log(`[${prefix}] Method ${key} returned:`, result);
return result;
};
return descriptor;
};
}
class MyClass {
@makeLoggingDecorator('INFO')
myMethod(message) {
console.log(message);
}
}
const instance = new MyClass();
instance.myMethod('Hello, world!');
`makeLoggingDecorator`颿°ã¯ã`prefix`åŒæ°ãåããã³ã¬ãŒã¿ãŒãã¡ã¯ããªã§ããè¿ããããã³ã¬ãŒã¿ãŒã¯ããã®ãã¬ãã£ãã¯ã¹ããã°ã¡ãã»ãŒãžã§äœ¿çšããŸãããã®ã¢ãããŒãã¯ããã®ã³ã°ãšã«ã¹ã¿ãã€ãºã®å€æ§æ§ãé«ããŸãã
TypeScriptã§ã®ãã³ã¬ãŒã¿ãŒã®äœ¿çš
TypeScriptã¯ãã³ã¬ãŒã¿ãŒã匷åã«ãµããŒãããŠãããåå®å šæ§ã確ä¿ããæ¢åã®ã³ãŒããšã®ããè¯ãçµ±åãå¯èœã«ããŸããTypeScriptã¯ãã³ã¬ãŒã¿ãŒæ§æãJavaScriptã«ã³ã³ãã€ã«ããBabelãšåæ§ã®æ©èœããµããŒãããŸãã
function logMethod(target: any, key: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`[LOG] Calling method ${key} with arguments:`, args);
const result = originalMethod.apply(this, args);
console.log(`[LOG] Method ${key} returned:`, result);
return result;
};
return descriptor;
}
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@logMethod
greet(): string {
return "Hello, " + this.greeting;
}
}
const greeter = new Greeter("world");
console.log(greeter.greet());
ãã®TypeScriptã®äŸã§ã¯ããã³ã¬ãŒã¿ãŒæ§æã¯åãã§ããTypeScriptã¯åãã§ãã¯ãšéçè§£æãæäŸããéçºãµã€ã¯ã«ã®æ©ã段éã§æœåšçãªãšã©ãŒãæããã®ã«åœ¹ç«ã¡ãŸããTypeScriptãšJavaScriptã¯ãç¹ã«å€§èŠæš¡ãããžã§ã¯ãã«ãããŠãåœéçãªãœãããŠã§ã¢éçºã§é »ç¹ã«äžç·ã«äœ¿çšãããŸãã
ã¡ã¿ããŒã¿APIã«é¢ããèæ ®äºé
çŸåšã®ã¹ããŒãž3ææ¡ã§ã¯ãæšæºçãªã¡ã¿ããŒã¿APIããŸã å®å šã«å®çŸ©ãããŠããŸãããéçºè ã¯ã¡ã¿ããŒã¿ã®ä¿åãšååŸã®ããã«ããªãã¬ã¯ã·ã§ã³ã©ã€ãã©ãªããµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ã«é ŒãããšããããããŸããã¡ã¿ããŒã¿APIãæçµæ±ºå®ãããã«ã€ããŠãECMAScriptããããŒã¶ã«ã®ææ°æ å ±ãåžžã«ç¢ºèªããããšãéèŠã§ãããããã®ã©ã€ãã©ãªã¯ããã³ã¬ãŒããããèŠçŽ ã«é¢é£ä»ããããã¡ã¿ããŒã¿ãä¿åããã³ååŸã§ããAPIãæäŸããããšããããããŸãã
æœåšçãªãŠãŒã¹ã±ãŒã¹ãšå©ç¹
- ããªããŒã·ã§ã³: ããããã£ãšã¡ãœãããã©ã¡ãŒã¿ãæ€èšŒããŠããŒã¿æŽåæ§ã確ä¿ããŸãã
- ã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãº: ãªããžã§ã¯ããJSONãä»ã®åœ¢åŒã«å€æããããŸãã¯ãã®éã®ããã»ã¹ãç°¡çŽ åããŸãã
- äŸåæ§æ³šå ¥: å¿ èŠãªãµãŒãã¹ãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãã¡ãœããã«æ³šå ¥ããŠäŸåé¢ä¿ã管çããŸãããã®ã¢ãããŒãã¯ããã¹ãå®¹ææ§ãšä¿å®æ§ãåäžãããŸãã
- èªå¯: ãŠãŒã¶ãŒã®åœ¹å²ãæš©éã«åºã¥ããŠã¡ãœãããžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããŸãã
- ãã£ãã·ã³ã°: é«ã³ã¹ããªæäœã®çµæãä¿åããããšã§ããã©ãŒãã³ã¹ãåäžããããã£ãã·ã³ã°æŠç¥ãå®è£ ããŸãã
- ã¢ã¹ãã¯ãæåããã°ã©ãã³ã° (AOP): ã³ã¢ã®ããžãã¹ããžãã¯ã倿Žããããšãªãããã®ã³ã°ããšã©ãŒåŠçãããã©ãŒãã³ã¹ç£èŠãªã©ã®æšªæçé¢å¿äºãé©çšããŸãã
- ãã¬ãŒã ã¯ãŒã¯/ã©ã€ãã©ãªéçº: çµã¿èŸŒã¿ã®æ¡åŒµæ©èœãåããåå©çšå¯èœãªã³ã³ããŒãã³ããã©ã€ãã©ãªãäœæããŸãã
- ãã€ã©ãŒãã¬ãŒãã®åæž: ç¹°ãè¿ãçºçããã³ãŒããåæžããã¢ããªã±ãŒã·ã§ã³ãããã¯ãªãŒã³ã§ä¿å®ããããããŸãã
ãããã¯ãäžçäžã®å€ãã®ãœãããŠã§ã¢éçºç°å¢ã§é©çšå¯èœã§ãã
ãã³ã¬ãŒã¿ãŒã䜿çšããã¡ãªãã
- ã³ãŒãã®å¯èªæ§: ãã³ã¬ãŒã¿ãŒã¯ãæ©èœãæç¢ºãã€ç°¡æœã«è¡šçŸããæ¹æ³ãæäŸããããšã§ãã³ãŒãã®å¯èªæ§ãåäžãããŸãã
- ä¿å®æ§: é¢å¿äºãžã®å€æŽãåé¢ããããããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãå£ããªã¹ã¯ãæžå°ããŸãã
- åå©çšæ§: ãã³ã¬ãŒã¿ãŒã¯ãåãæ¯ãèããè€æ°ã®ã¯ã©ã¹ãã¡ãœããã«é©çšã§ããããã«ããããšã§ãã³ãŒãã®åå©çšãä¿é²ããŸãã
- ãã¹ãå®¹ææ§: ã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåãåé¢ããŠãã¹ããããããªããŸãã
- é¢å¿ã®åé¢: ã³ã¢ããžãã¯ã暪æçé¢å¿äºããåé¢ããã¢ããªã±ãŒã·ã§ã³ãçè§£ããããããŸãã
ãããã®ã¡ãªããã¯ããããžã§ã¯ãã®èŠæš¡ãããŒã ã®å Žæã«é¢ä¿ãªããæ®éçã«æçã§ãã
ãã³ã¬ãŒã¿ãŒã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- ãã³ã¬ãŒã¿ãŒãã·ã³ãã«ã«ä¿ã€: åäžã®æç¢ºã«å®çŸ©ãããã¿ã¹ã¯ãå®è¡ãããã³ã¬ãŒã¿ãŒãç®æããŸãã
- ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªãè³¢ã䜿çšãã: ããé«ãæè»æ§ãšå¶åŸ¡ã®ããã«ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªã䜿çšããŸãã
- ãã³ã¬ãŒã¿ãŒãææžåãã: åãã³ã¬ãŒã¿ãŒã®ç®çãšäœ¿çšæ³ãææžåããŸããé©åãªããã¥ã¡ã³ãã¯ãç¹ã«ã°ããŒãã«ããŒã å ã§ä»ã®éçºè ãã³ãŒããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
- ãã³ã¬ãŒã¿ãŒããã¹ããã: ãã³ã¬ãŒã¿ãŒãæåŸ ã©ããã«æ©èœããããšã確èªããããã®ãã¹ããäœæããŸããããã¯ãã°ããŒãã«ããŒã ã®ãããžã§ã¯ãã§äœ¿çšãããå Žåã«ç¹ã«éèŠã§ãã
- ããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ãã: ç¹ã«ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãéèŠãªé åã§ããã³ã¬ãŒã¿ãŒã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã«æ³šæããŸãã
- ææ°æ å ±ãå ¥æãã: ãã³ã¬ãŒã¿ãŒã«é¢ããECMAScriptããããŒã¶ã«ã®ææ°ã®ååãšé²åããæšæºã«ã€ããŠãåžžã«æ å ±ãå ¥æãç¶ããŸãã
課é¡ãšå¶é
- æ§æã®é²å: ãã³ã¬ãŒã¿ãŒã®æ§æã¯æ¯èŒçå®å®ããŠããŸããããŸã 倿Žãããå¯èœæ§ããããæ£ç¢ºãªæ©èœãAPIã¯è¥å¹²ç°ãªãå ŽåããããŸãã
- åŠç¿æ²ç·: ãã³ã¬ãŒã¿ãŒãšã¡ã¿ããã°ã©ãã³ã°ã®æ ¹åºã«ããæŠå¿µãçè§£ããã«ã¯ãæéããããããšããããŸãã
- ãããã°: ãã³ã¬ãŒã¿ãŒãå°å ¥ããæœè±¡åã®ããããã³ã¬ãŒã¿ãŒãå©çšããã³ãŒãã®ãããã°ã¯ããå°é£ã«ãªãããšããããŸãã
- äºææ§: ã¿ãŒã²ããç°å¢ããã³ã¬ãŒã¿ãŒããµããŒãããŠããããšã確èªãããããã©ã³ã¹ãã€ã©ã䜿çšããŸãã
- é床ã®äœ¿çš: ãã³ã¬ãŒã¿ãŒã®äœ¿ããããé¿ããŸããå¯èªæ§ãç¶æããããã«é©åãªæœè±¡åã¬ãã«ãéžæããããšãéèŠã§ãã
ãããã®ç¹ã¯ãããŒã æè²ãšãããžã§ã¯ãèšç»ãéããŠç·©åããããšãã§ããŸãã
çµè«
JavaScriptãã³ã¬ãŒã¿ãŒã¯ãã³ãŒããæ¡åŒµããã³å€æŽããããã®åŒ·åã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸãããã®æ§æãä¿å®æ§ãå¯èªæ§ãåäžãããŸããã¡ã¿ããŒã¿ããã°ã©ãã³ã°ã®ååãçè§£ãããã³ã¬ãŒã¿ãŒã广çã«æŽ»çšããããšã§ãéçºè ã¯ããå ç¢ã§æè»ãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããECMAScriptæšæºãé²åããã«ã€ããŠããã³ã¬ãŒã¿ãŒã®å®è£ ã«é¢ããæ å ±ãåžžã«ææ¡ããŠããããšã¯ããã¹ãŠã®JavaScriptéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ããããªããŒã·ã§ã³ããã®ã³ã°ããããããã£ã®è¿œå ãŸã§ãæäŸãããäŸã¯ãã³ã¬ãŒã¿ãŒã®å€æ§æ§ã瀺ããŠããŸããæç¢ºãªäŸãšã°ããŒãã«ãªèŠç¹ãçšããããšã§ãè°è«ãããæŠå¿µã®åºç¯ãªé©çšæ§ã瀺ãããŠããŸãã
ãã®ããã°èšäºã§æŠèª¬ãããæŽå¯ãšãã¹ããã©ã¯ãã£ã¹ã¯ãããªãã®ãããžã§ã¯ãã§ãã³ã¬ãŒã¿ãŒã®åãæŽ»çšããããšãå¯èœã«ããŸããããã«ã¯ããã€ã©ãŒãã¬ãŒãã®åæžãã³ãŒãæ§æã®æ¹åãJavaScriptãæäŸããã¡ã¿ããã°ã©ãã³ã°æ©èœãžã®ããæ·±ãçè§£ãšãã£ãå©ç¹ãå«ãŸããŸãããã®ã¢ãããŒãã¯ãåœéçãªããŒã ã«ãšã£ãŠç¹ã«é¢é£æ§ãé«ããã®ã§ãã
ãããã®å®è·µãæ¡çšããããšã§ãéçºè ã¯ããè¯ãJavaScriptã³ãŒããèšè¿°ããã€ãããŒã·ã§ã³ãšçç£æ§ã®åäžãå¯èœã«ããŸãããã®ã¢ãããŒãã¯ãå Žæã«é¢ä¿ãªããããé«ãå¹çãä¿é²ããŸãã
ãã®ããã°ã®æ å ±ã¯ãããããç°å¢ã§ã³ãŒããæ¹åããããã«å©çšã§ãããŸããŸãçžäºæ¥ç¶ãé²ãã°ããŒãã«ãªãœãããŠã§ã¢éçºã®äžçã«ãããŠéåžžã«éèŠã§ãã