ãã®æçš¿ã¯ã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.isExtensiblevalueOfããã³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ã