ãã®æçš¿ã¯ãJavaScriptã§ã®ãªããžã§ã¯ãã®æ¥åžžçãªäœ¿çšãè¶
ããŠããŸãã ãªããžã§ã¯ãã®æäœã®åºæ¬ã¯ãJSONè¡šèšã䜿çšããã®ãšã»ãšãã©åããããç°¡åã§ãã ããã§ããJavaScriptã䜿çšãããšãããã€ãã®èå³æ·±ã䟿å©ãªæ¹æ³ã§ãªããžã§ã¯ããäœæã§ããææ°ã®ãã©ãŠã¶ãŒã®ææ°ããŒãžã§ã³ã§äœ¿çšã§ããããã«ãªã£ã埮åŠãªããŒã«ã䜿çšã§ããŸãã
æèµ·ãããæåŸã®2ã€ã®åé¡-
Proxy
ãš
Symbol
ã¯ECMAScript 6ä»æ§ã«é¢é£ããŠãããäžéšã®è¿ä»£çãªãã©ãŠã¶ã§ã®ã¿éšåçã«å®è£
ããã³å®è£
ãããŠããŸãã
ã²ãã¿ãŒãšã»ãã¿ãŒ
ã²ãã¿ãŒãšã»ãã¿ãŒã¯ãã°ããã®éJavaScriptã§äœ¿çšã§ããŸããããé »ç¹ã«äœ¿çšããå¿
èŠãããããšã«æ°ã¥ããŸããã§ããã å€ãã®å Žåã次ã®ãããªããããã£ãååŸããããã®éåžžã®é¢æ°ãäœæããŸãã
function Product(prefix) { this.prefix_ = prefix; this.type_ = ""; } Product.prototype.setType = function (newType) { this.type_ = newType; }; Product.prototype.type = function () { return this.prefix_ + ": " + this.type_; } var product = new Product("fruit"); product.setType("apple"); console.log(product.type());
jsfiddleã²ãã¿ãŒã䜿çšãããšããã®ã³ãŒããç°¡çŽ åã§ããŸãã
function Product(prefix) { this.prefix_ = prefix; this.type_ = ""; } Product.prototype = { get type () { return this.prefix_ + ": " + this.type_; }, set type (newType) { this.type_ = newType; } }; var product = new Product("fruit"); product.type = "apple"; console.log(product.type);
jsfiddleã³ãŒãã¯å°ãåé·ã§ãããæ§æã¯å°ãå€ãã£ãŠããŸããã
get
ãš
set
ã䜿çšããå©ç¹ã¯ãçŽæ¥äœ¿çšãããšããæããã«ãªããŸãã ç§ã¯èªåèªèº«ã«ãããèŠã€ããŸããïŒ
product.type = "apple"; console.log(product.type);
ããã¯ããã«èªã¿ãããïŒ
product.setType("apple"); console.log(product.type());
ãã ããçµã¿èŸŒã¿ã®äžæ£ãªJavaScriptã¢ã©ãŒã ã¯ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ãšããããã£ã®èšå®ã確èªãããšããªã¬ãŒãããŸãã é·ãéãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ãžã®ããããã£ã®byæçãªå²ãåœãŠãé¿ããããã«ããã°ãšæè¡çèŠä»¶ã«ãã£ãŠæããããŸãããããã¯ãæ
å ±ããããã®éã§ç¢ºå®ã«åæ£ããããšããäºå®ã«ã€ãªããããã§ãã ãŸããèšå®å€ãè¿ãããé åºã«ã¯åŸ®åŠãªéãããããŸãã以äžã®äŸãåç
§ããŠãã ããã
console.log(product.type = "orange");
æåã«
âorangeâ
ãã³ã³ãœãŒã«ã«è¡šç€ºããã次ã«
âfruit: orangeâ
ã衚瀺ãããããšã«æ³šæããŠãã ããã èšå®å€ãè¿ãããéãã²ãã¿ãŒã¯å®è¡ãããŸããããã®ããããã®åœ¢åŒã®çç¥ãããæžã蟌ã¿ã§ã¯ãåé¡ãçºçããå ŽåããããŸãã
set
è¿ãããå€ã¯ç¡èŠãããŸãã
return this.type;
è¿œå
return this.type;
set
ãããšããã®åé¡ã¯è§£æ±ºããŸããã ããã¯éåžžãã»ãããã€ã³ããåå©çšããããšã§è§£æ±ºãããŸãããã²ãã¿ãŒãæã€ããããã£ã®åé¡ãçºçããå¯èœæ§ããããŸãã
defineProperty
æ§æ
get propertyname ()
ã¯ãªããžã§ã¯ããªãã©ã«ã§æ©èœããåã®äŸã§ã¯
Product.prototype
ãªããžã§ã¯ã
Product.prototype
ãå²ãåœãŠãŸããã ããã«ã¯äœã®åé¡ããããŸãããããã®ãããªãªãã©ã«ã䜿çšãããšããããã¿ã€ãåŒã³åºãã®é£éãè€éã«ãªããç¶æ¿ãå®è£
ãããŸãã ãªãã©ã«ã䜿çšããã«ãããã¿ã€ãã§ã²ãã¿ãŒãšã»ãã¿ãŒãå®çŸ©ããããšã¯å¯èœ
defineProperty
ã䜿çšããŠ
function Product(prefix) { this.prefix_ = prefix; this.type_ = ""; } Object.defineProperty(Product.prototype, "type", { get: function () { return this.prefix_ + ": " + this.type_; }, set: function (newType) { this.type_ = newType; } });
jsfiddleãã®ã³ãŒãã®åäœã¯ãåã®äŸãšåãã§ãã ã²ãã¿ãŒãšã»ãã¿ãŒãè¿œå ãã代ããã«ã
defineProperty
ã
defineProperty
ãŸãã
defineProperty
ã®3çªç®ã®åŒæ°ã¯ãã³ãã«ã§ããã
set
ããã³
get
ã«å ããŠ
get
ã¢ã¯ã»ã·ããªãã£ãæ§æããå€ãèšå®ããæ©èœãæäŸããŸãã
defineProperty
ã䜿çšãããšãå®æ°ã®ãããªãã®ãäœæã§ããŸã-åé€ãŸãã¯ãªãŒããŒã©ã€ããããªãããããã£ã
var obj = { foo: "bar", };
jsfiddleçµæïŒ
bar foobar undefined bar bar bar
foo.bar
ãã®ããã©ã«ãã®åäœã¯å€æŽãçŠæ¢ããããšã§ãããããäŸã®
foo.bar
ããªãŒããŒã©ã€ãããæåŸã®2ã€ã®è©Šè¡ã¯å€±æããŸããïŒãšã©ãŒã¡ãã»ãŒãžã«ãã£ãŠäžæãããªãã£ãå Žåã§ãïŒã ãã®åäœãå€æŽããã«ã¯ã
configurable
writable
ããã³
writable
䜿çšã§ã
writable
ã strictã¢ãŒãã䜿çšãããšãäžè¬çãªJavaScriptãšã©ãŒã§ããããããšã©ãŒãã¹ããŒãããŸãã
var obj = {}; Object.defineProperty(obj, "foo", { value: "bar", configurable: true, writable: true, }); console.log(obj.foo);
jsfiddleconfigurable
ãªããŒã¯ãããããã£ããªããžã§ã¯ãããåé€ãããã®ãé²ããŸãã ããã«ã
defineProperty
å¥ã®åŒã³åºãã«ããããããã£ãžã®åŸç¶ã®å€æŽãé²ãããšãã§ããŸãã
writable
ããŒã䜿çšãããšãããããã£ãžã®æžã蟌ã¿ãŸãã¯å€ã®å€æŽãã§ããŸãã
configurable
false
èšå®ãããŠããå ŽåïŒããã©ã«ãïŒã
defineProperty
ã2ååŒã³åºããšããšã©ãŒãã¹ããŒãããŸãã
var obj = {}; Object.defineProperty(obj, "foo", { value: "bar", }); Object.defineProperty(obj, "foo", { value: "foobar", });
jsfiddleconfigurable
true
ã«èšå®ãããŠãã
true
ãå°æ¥ããããã£ãŒãå€æŽã§ããŸãã ããã¯ãæžã蟌ã¿äžå¯ã®ããããã£ã®å€ãå€æŽããããã«äœ¿çšã§ããŸãã
var obj = {}; Object.defineProperty(obj, "foo", { value: "bar", configurable: true, }); obj.foo = "foobar"; console.log(obj.foo);
jsfiddleãŸãã
defineProperty
å®çŸ©ãããå€ã
for in
ã«ãŒãã§
defineProperty
ãªãããšã«æ³šæããå¿
èŠããããŸãã
var i, inventory; inventory = { "apples": 10, "oranges": 13, }; Object.defineProperty(inventory, "strawberries", { value: 3, }); for (i in inventory) { console.log(i, inventory[i]); }
jsfiddle apples 10 oranges 13
ãããæå¹ã«ããã«ã¯ã
enumerable
ããããã£ã䜿çšããå¿
èŠããããŸã
var i, inventory; inventory = { "apples": 10, "oranges": 13, }; Object.defineProperty(inventory, "strawberries", { value: 3, enumerable: true, }); for (i in inventory) { console.log(i, inventory[i]); }
jsfiddle apples 10 oranges 13 strawberries 3
for in
ã«ãŒãã«ããããã£ã衚瀺ããããã©ããã確èªããã«ã¯ã
isPropertyEnumerable
ã䜿çšã§ããŸã
var i, inventory; inventory = { "apples": 10, "oranges": 13, }; Object.defineProperty(inventory, "strawberries", { value: 3, }); console.log(inventory.propertyIsEnumerable("apples"));
jsfiddlepropertyIsEnumerable
åŒã³åºãã¯ããããã¿ã€ããã§ãŒã³ã§äžèšã§å®çŸ©ãããããããã£ããŸãã¯ãã®ãªããžã§ã¯ãã«å¯ŸããŠä»ã®æ¹æ³ã§å®çŸ©ãããŠããªãããããã£ã«å¯ŸããŠã
false
ãè¿ããŸãããããã¯æããã§ãã
æåŸã«ã
defineProperty
ã®äœ¿çšã«é¢ããããã€ãã®èšèïŒ
set
ã¡ãœãããš
get
ã¢ã¯ã»ã¹ã¡ãœããã
writable: true
ã«çµåãããã
value
ãšçµåãããããã®ã¯ééã
value
ã çªå·ã䜿çšããŠããããã£ãå®çŸ©ãããšãä»ã®ç¶æ³ã®å Žåãšåæ§ã«ããã®çªå·ãæååã«åæ ãããŸãã
defineProperty
ã䜿çšããŠã
value
ãé¢æ°ãšããŠå®çŸ©ããããšãã§ããŸãã
defineProperties
defineProperties
ããããŸãã ãã®ã¡ãœããã䜿çšãããšãäžåºŠã«è€æ°ã®ããããã£ãå®çŸ©ã§ããŸãã definePropertiesã®äœ¿çšãš
defineProperties
ãæ¯èŒãã
defineProperties
ã«
defineProperty
ãŸãããå°ãªããšãChromeã§ã¯ãã©ã®ã¡ãœããã䜿çšãããã«å€§ããªéãã¯ãããŸããã§ããã
var foo = {} Object.defineProperties(foo, { bar: { value: "foo", writable: true, }, foo: { value: function() { console.log(this.bar); } }, }); foo.bar = "foobar"; foo.foo();
jsfiddleObject.create
Object.create
ã¯
new
ã®ä»£æ¿ã§ãããç¹å®ã®ãããã¿ã€ãã䜿çšããŠãªããžã§ã¯ããäœæã§ããŸãã ãã®é¢æ°ã¯2ã€ã®åŒæ°ãåããŸãã1ã€ç®ã¯ãªããžã§ã¯ããäœæãããããã¿ã€ãã§ã2ã€ç®ã¯
Object.defineProperties
åŒã³åºããšãã«äœ¿çšããããã³ãã«ãšåã
Object.defineProperties
var prototypeDef = { protoBar: "protoBar", protoLog: function () { console.log(this.protoBar); } }; var propertiesDef = { instanceBar: { value: "instanceBar" }, instanceLog: { value: function () { console.log(this.instanceBar); } } } var foo = Object.create(prototypeDef, propertiesDef); foo.protoLog();
jsfiddleç©æ§ èšè¿°åã䜿çšããŠèª¬æãããšããããã¿ã€ãã®å¯Ÿå¿ããããããã£ãäžæžããããŸãã
var prototypeDef = { bar: "protoBar", }; var propertiesDef = { bar: { value: "instanceBar", }, log: { value: function () { console.log(this.bar); } } } var foo = Object.create(prototypeDef, propertiesDef); foo.log();
jsfiddleå®çŸ©ãããããããã£ã®å€ãšããŠ
Array
ã
Object
ãªã©ã®éããªããã£ãåã䜿çšãããšããããã®ããããã£ãäœæããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãšå
±æããããããééãã«ãªãå¯èœæ§ããããŸãã
var prototypeDef = { protoArray: [], }; var propertiesDef = { propertyArray: { value: [], } } var foo = Object.create(prototypeDef, propertiesDef); var bar = Object.create(prototypeDef, propertiesDef); foo.protoArray.push("foobar"); console.log(bar.protoArray);
jsfiddleããã¯ã
null
å€ã§
propertyArray
ãåæåããããšã§åé¿ã§ã
null
ããã®åŸãå¿
èŠãªé
åãè¿œå ããããããšãã°ã²ãã¿ãŒã䜿çšããŠäœãæµè¡ã«ææãªããšãè¡ããŸãã
var prototypeDef = { protoArray: [], }; var propertiesDef = { propertyArrayValue_: { value: null, writable: true }, propertyArray: { get: function () { if (!this.propertyArrayValue_) { this.propertyArrayValue_ = []; } return this.propertyArrayValue_; } } } var foo = Object.create(prototypeDef, propertiesDef); var bar = Object.create(prototypeDef, propertiesDef); foo.protoArray.push("foobar"); console.log(bar.protoArray);
jsfiddleããã¯ãå€æ°ã®åæåãšãã®å®çŸ©ãçµã¿åããããšã¬ã¬ã³ããªæ¹æ³ã§ãã å€æ°ã®åæåãšãšãã«å€æ°ã®å®çŸ©ãå®è¡ããããšã奜ããšæããŸãããããã¯ã³ã³ã¹ãã©ã¯ã¿ã§åãããšãè¡ããããã¯ããã«è¯ãã§ãããã éå»ã«ãåæåãå®è¡ããå€ãã®ã³ãŒãããã巚倧ãªã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããŸããã
åã®äŸã¯ã
Object.create
èšè¿°åã®ä»»æã®å€ã«æž¡ãããåŒã¯ãèšè¿°åãå®çŸ©ããããšãã«å®è¡ãããããšãèŠããŠããå¿
èŠãããããšã瀺ããŠããŸãã ããããé
åãã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«å
±éã«ãªã£ãçç±ã§ãã ãŸããè€æ°ã®ããããã£ãäžç·ã«å®çŸ©ãããŠããå Žåãåºå®ãããé åºã«é Œããªãããšããå§ãããŸãã æ¬åœã«å¿
èŠãªå Žå
Object.defineProperty
ã€ã®ããããã£ãä»ã®ããããã£ãããå
ã«å®çŸ©ããå Žå-ãã®å Žåã¯ã
Object.defineProperty
ã䜿çšããããšãã
Object.defineProperty
ããŸãã
Object.create
ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãåŒã³åºããªãããã
instanceof
ã䜿çšããŠãªããžã§ã¯ãã®IDã確èªããããšã¯ã§ããªããªããŸããã 代ããã«ããªããžã§ã¯ãã®
prototype
ããããã£ã«å¯ŸããŠãã§ãã¯ãã
isPrototypeOf
ã䜿çšã§ããŸãã ããã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®å Žåã¯MyFunction.prototypeããŸãã¯
Object.create
æåã®åŒæ°ãšããŠæž¡ããããªããžã§ã¯ãã«ãªããŸã
function Foo() { } var prototypeDef = { protoArray: [], }; var propertiesDef = { propertyArrayValue_: { value: null, writable: true }, propertyArray: { get: function () { if (!this.propertyArrayValue_) { this.propertyArrayValue_ = []; } return this.propertyArrayValue_; } } } var foo1 = new Foo();
jsfiddleisPrototypeOf
ã¯ãããã¿ã€ããã§ãŒã³ãäžéããæ¯èŒå¯Ÿè±¡ã®ãªããžã§ã¯ããšäžèŽãããã®ãããã°
true
ãè¿ã
true
ã
var foo1Proto = { foo: "foo", }; var foo2Proto = Object.create(foo1Proto); foo2Proto.bar = "bar"; var foo = Object.create(foo2Proto); console.log(foo.foo, foo.bar);
jsfiddleãªããžã§ã¯ãã®ãã·ãŒã«ãããããªãŒãºãããã³æ¡åŒµã®é²æ¢
ãã®ãããªå¯èœæ§ããããšããçç±ã ãã§ãã©ã³ãã ãªãªããžã§ã¯ããšã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ä»»æã®ããããã£ãè¿œå ãããšãå°ãªããšãã³ãŒãã¯è¯ããªããŸããã node.jsããã³ææ°ã®ãã©ãŠã¶ãŒã§ã¯ã
defineProperty
ã䜿çšããŠåã
ã®ããããã£ãžã®å€æŽãå¶éããæ©èœã«å ããŠããªããžã§ã¯ãå
šäœãžã®å€æŽãå¶éããæ©èœããããŸãã
Object.preventExtensions
ã
Object.seal
ããã³
Object.freeze
ãããã®åã¡ãœããã¯ããªããžã§ã¯ãã®å€æŽã«å¯ŸããŠããå³ããå¶éã課ããŸãã å³æ Œã¢ãŒãã§ã¯ããããã®ã¡ãœããã«ãã£ãŠèª²ããããå¶éã«éåãããšããšã©ãŒãã¹ããŒãããŸããããã§ãªãå Žåããšã©ãŒã¯ãéãã«ãçºçããŸãã
Object.preventExtensions
ã¡ãœããã¯ããªããžã§ã¯ãã«æ°ããããããã£ãè¿œå ã§ããªãããã«ããŸãã æžã蟌ã¿çšã«éããŠããããããã£ãå€æŽããããã«ã¹ã¿ãã€ãºå¯èœãªããããã£ãåé€ãããããããšã劚ããŸããã ããã«ã
Object.preventExtensions
ã¯ãæ¢åã®ããããã£ãå€æŽããããã«
Object.defineProperty
ã®åŒã³åºãã䜿çšããããšãäžå¯èœã«ããŸããã
var obj = { foo: "foo", }; obj.bar = "bar"; console.log(obj);
jsfiddleïŒãªããžã§ã¯ãã®æçµå€ã®ã¿ãã³ã³ãœãŒã«ã«è¡šç€ºããããããéçºè
ã³ã³ãœãŒã«ãéããç¶æ
ã§ä»¥åã®jsfiddleãåèµ·åããå¿
èŠãããããšã«æ³šæããŠãã ããïŒObject.seal
ã¯ããã«
Object.seal
é²ã¿ãŸãã
Object.preventExtensions
ãããã ãã®ã¡ãœããã¯ããªããžã§ã¯ããžã®æ°ããããããã£ã®è¿œå ãçŠæ¢ããããšã«å ããŠãæ¢åã®ããããã£ãããã«æ§æããã³åé€ããæ©èœãå¶éããŸãã ãªããžã§ã¯ããå°å°ããããšã
defineProperty
æ¢åã®ããããã£ãå€æŽã§ããªããªããŸãã äžèšã®ããã«ãstrictã¢ãŒãã§ãããã®çŠæ¢äºé
ã«éåãããšããšã©ãŒãã¹ããŒãããŸãã
"use strict"; var obj = {}; Object.defineProperty(obj, "foo", { value: "foo" }); Object.seal(obj);
jsfiddleãŸããããããã£ãå
ã
ã«ã¹ã¿ãã€ãºå¯èœã§ãã£ããšããŠããããããã£ãåé€ããããšã¯ã§ããŸããã ããšã¯ãããããã£å€ãå€æŽããã ãã§ãã
"use strict"; var obj = {}; Object.defineProperty(obj, "foo", { value: "foo", writable: true, configurable: true, }); Object.seal(obj); console.log(obj.foo);
jsfiddleæçµçã«ã
Object.freeze
ã¯ãªããžã§ã¯ããå€æŽããå®å
šã«ä¿è·ããŸãã åçµãããããªããžã§ã¯ããã®ããããã£å€ãè¿œå ãåé€ããŸãã¯å€æŽããããšã¯ã§ããŸããã
Object.defineProperty
ã䜿çšããŠãªããžã§ã¯ãã®æ¢åã®ããããã£ã®å€ãå€æŽããæ¹æ³ããããŸããã
"use strict"; var obj = { foo: "foo1" }; Object.freeze(obj);
jsfiddleãªããžã§ã¯ãããããªãŒãºãããã·ãŒã«ãããŸãã¯å±éããä¿è·ãããŠãããã©ããã確èªã§ããã¡ãœããã¯æ¬¡ã®ãšããã§ãã
Object.isFrozen
ã
Object.isSealed
ããã³
Object.isExtensible
valueOfããã³toString
JavaScriptãããªããã£ããªå€ãååŸããããšãæåŸ
ããŠããå Žåã
valueOf
ãš
toString
ã䜿çšããŠãã³ã³ããã¹ãå
ã®ãªããžã§ã¯ãã®åäœãã«ã¹ã¿ãã€ãºã§ããŸãã
toString
ã®äœ¿çšäŸã次ã«ç€ºããŸãã
function Foo (stuff) { this.stuff = stuff; } Foo.prototype.toString = function () { return this.stuff; } var f = new Foo("foo"); console.log(f + "bar");
jsfiddleãããŠ
valueOf
ïŒ
function Foo (stuff) { this.stuff = stuff; } Foo.prototype.valueOf = function () { return this.stuff.length; } var f = new Foo("foo"); console.log(1 + f);
jsfiddleãããã®2ã€ã®æ¹æ³ã®äœ¿çšãçµã¿åããããšãäºæããªãçµæãåŸãããšãã§ããŸãã
function Foo (stuff) { this.stuff = stuff; } Foo.prototype.valueOf = function () { return this.stuff.length; } Foo.prototype.toString = function () { return this.stuff; } var f = new Foo("foo"); console.log(f + "bar");
jsfiddletoString
ã䜿çšããé©åãªæ¹æ³ã¯ããªããžã§ã¯ããããã·ã¥å¯èœã«ããããšã§ãã
function Foo (stuff) { this.stuff = stuff; } Foo.prototype.toString = function () { return this.stuff; } var f = new Foo("foo"); var obj = {}; obj[f] = true; console.log(obj);
jsfiddlegetOwnPropertyNamesããã³ããŒ
ãªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ãååŸããã«ã¯ã
Object.getOwnPropertyNames
ã䜿çšã§ããŸãã Pythonã«ç²ŸéããŠããå Žåã
Object.keys
ã¡ãœãããååšããŸãããäžè¬çã«ã¯èŸæžã®
keys
ã¡ãœããã«äŒŒãŠã
keys
ã
Object.keys
ãš
Object.getOwnPropertyNames
ã®äž»ãªéãã¯ãåŸè
ããåæäžå¯èœãªãããããã£ãè¿ãããšã§ãããããã®ããããã£ã¯
for in
ã«ãŒãã®
for in
æã«èæ
®ãããŸããã
var obj = { foo: "foo", }; Object.defineProperty(obj, "bar", { value: "bar" }); console.log(Object.getOwnPropertyNames(obj));
jsfiddleèšå·
Symbol
ã¯ãECMAScrpt 6ããŒã¢ããŒã§å®çŸ©ãããŠããç¹å¥ãªæ°ããããªããã£ãã§ãããJavaScriptã®æ¬¡ã®å埩ã§äœ¿çšå¯èœã«ãªããŸãã ä»ããChrome CanaryãšFirefox Nightlyã§è©ŠããŠã¿ãŠãã ããã次ã®jsfiddleã®äŸã¯ãå°ãªããšã2014幎8æã®ãã®èšäºãæžããŠããæç¹ã§ã¯ããããã®ãã©ãŠã¶ãŒã§ã®ã¿æ©èœããŸãã
Symbol
ã¯ããªããžã§ã¯ãã®ããããã£ãäœæããã³åç
§ããæ¹æ³ãšããŠäœ¿çšã§ããŸãã
var obj = {}; var foo = Symbol("foo"); obj[foo] = "foobar"; console.log(obj[foo]);
jsfiddleSymbol
ã¯ãŠããŒã¯ã§äžå€ã§ã
jsfiddleSymbol
ã¯
Object.defineProperty
ã§äœ¿çšã§ããŸãïŒ
var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); console.log(obj[foo]);
jsfiddleSymbol
å®çŸ©ãããããããã£ã¯
for in
ã«ãŒãã§ç¹°ãè¿ãããŸãããã
hasOwnProperty
åŒã³åºãã¯æ£åžžã«æ©èœããŸãã
var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); console.log(obj.hasOwnProperty(foo));
jsfiddleSymbol
ã¯
Object.getOwnPropertyNames
é¢æ°ã«ãã£ãŠè¿ãããé
åã«å
¥ããŸãããã
Object. getOwnPropertySymbols
ã¡ãœããããã
Object. getOwnPropertySymbols
Object. getOwnPropertySymbols
var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", });
jsfiddleSymbol
ã䜿çšãããšãå¶çºçãªå€æŽããããããã£ãä¿è·ããã ãã§ãªããéåžžã®æäœäžã«è¡šç€ºããããªãå Žåã«ã䟿å©ã§ãã å¯èœæ§ã®ãããã¹ãŠã®æ©äŒã«ã€ããŠçå£ã«èããããšã¯ãããŸãããããŸã ãŸã ãããšæããŸãã
ãããã·
ECMAScript 6ã®ãã1ã€ã®é©æ°ã¯
Proxy
ã§ãã 2014幎8æçŸåšããããã·ã¯Firefoxã§ã®ã¿æ©èœããŸãã 次ã®jsfiddleã®äŸã¯Firefoxã§ã®ã¿æ©èœããå®éãã€ã³ã¹ããŒã«ããFirefoxããŒã¿çã§ãã¹ãããŸããã
ãããã·ã¯ãã¹ãŠã®ããããã£ãååŸããæ©äŒãæäŸããäŸã«æ³šæãæãã®ã§ããããã·ã¯æ¥œãããšæããŸãïŒ
var obj = { foo: "foo", }; var handler = { get: function (target, name) { if (target.hasOwnProperty(name)) { return target[name]; } return "foobar"; }, }; var p = new Proxy(obj, handler); console.log(p.foo);
jsfiddleãã®äŸã§ã¯ã
obj
ãªããžã§ã¯ãããããã·ããŠããŸãã äœæããããªããžã§ã¯ããšã®çžäºäœçšãåŠçãã
handler
ãªããžã§ã¯ããäœæããŸãã
get
handlerã¡ãœããã¯éåžžã«ç°¡åã§ãã ãªããžã§ã¯ããšãã¢ã¯ã»ã¹ãããããããã£ã®ååãåãåããŸãã ãã®æ
å ±ã¯ãã€ã§ãè¿ãããšãã§ããŸããããã®äŸã§ã¯ãããŒãããå Žåã¯å®éã®å€ãè¿ãããããŒããªãå Žåã¯foobarãè¿ãããŸãã ç§ã¯ã
Scala
ãããª
switch
ãããªãã®ã®1ã€ã§ããããããã·ã䜿çšããå¯èœæ§ãšèå³æ·±ãæ¹æ³ã®å·šå€§ãªãã£ãŒã«ããèŠãŠããŸãã
ãããã·ã®å¥ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ãã§ãã
get
å ã
has
ã
set
ã
has
ãããã³ä»ã®ãã³ãã©ãŒ
has
ãããŸãã ãããã·ãããè¯ããµããŒããåŸããšããç§ã¯åœŒãã«ç§ã®ããã°ã«å
šäœã®æçš¿ãããããšãheããŸããã MDNãããã·ã®ããã¥ã¡ã³ããèŠãŠãèšèŒãããŠããäŸã«æ³šæããããšããå§ãããŸãã
ãšããããjsconfããã®åªãããããã·ã¬ããŒãããããŸãã
ã¹ã©ã€ãJavaScriptã§ãªããžã§ã¯ãã䜿çšããæ¹æ³ã¯ãã©ã³ãã ããŒã¿ãåã«ä¿åãããããå€ããããŸãã ããããã£ãå®çŸ©ããããã®åŒ·åãªæ¹æ³ã¯æ¢ã«å©çšå¯èœã§ãããå°æ¥ãJavaScriptã³ãŒãã®èšè¿°æ¹æ³ããããã·ãã©ã®ããã«å€æŽã§ããããèãããšãããããã«ãããã«èå³æ·±ããã®ããããŸãã æ確åãã³ã¡ã³ãããããŸããããããã«ã€ããŠç§ã«ç¥ãããŠãã ãããããã«ç§ã®ãã€ãã¿ãŒããããŸãïŒ@bjorntiplingã