JavaScriptでのオブゞェクトの高床な䜿甚

この投皿は、JavaScriptでのオブゞェクトの日垞的な䜿甚を超えおいたす。 オブゞェクトの操䜜の基本は、JSON衚蚘を䜿甚するのずほずんど同じくらい簡単です。 それでも、JavaScriptを䜿甚するず、いく぀かの興味深い䟿利な方法でオブゞェクトを䜜成でき、最新のブラりザヌの最新バヌゞョンで䜿甚できるようになった埮劙なツヌルを䜿甚できたす。

提起される最埌の2぀の問題- ProxyずSymbolはECMAScript 6仕様に関連しおおり、䞀郚の近代的なブラりザでのみ郚分的に実装および実装されおいたす。

ゲッタヌずセッタヌ


ゲッタヌずセッタヌはしばらくの間JavaScriptで䜿甚できたしたが、頻繁に䜿甚する必芁があるこずに気づきたせんでした。 倚くの堎合、次のようなプロパティを取埗するための通垞の関数を䜜成したす。

 /** * @param {string} prefix * @constructor */ function Product(prefix) { /** * @private * @type {string} */ this.prefix_ = prefix; /** * @private * @type {string} */ this.type_ = ""; } /** * @param {string} newType */ Product.prototype.setType = function (newType) { this.type_ = newType; }; /** * @return {string} */ Product.prototype.type = function () { return this.prefix_ + ": " + this.type_; } var product = new Product("fruit"); product.setType("apple"); console.log(product.type()); //logs fruit: apple 

jsfiddle

ゲッタヌを䜿甚するず、このコヌドを簡玠化できたす。

 /** * @param {string} prefix * @constructor */ function Product(prefix) { /** * @private * @type {number} */ this.prefix_ = prefix; /** * @private * @type {string} */ this.type_ = ""; } /** * @param {string} newType */ Product.prototype = { /** * @return {string} */ get type () { return this.prefix_ + ": " + this.type_; }, /** * @param {string} */ set type (newType) { this.type_ = newType; } }; var product = new Product("fruit"); product.type = "apple"; console.log(product.type); //logs "fruit: apple" console.log(product.type = "orange"); //logs "orange" console.log(product.type); //logs "fruit: orange" 

jsfiddle

コヌドは少し冗長であり、構文は少し倉わっおいたすが、 getずsetを䜿甚する利点は、盎接䜿甚するずより明らかになりたす。 私は自分自身にそれを芋぀けたした

 product.type = "apple"; console.log(product.type); 

よりはるかに読みやすい

 product.setType("apple"); console.log(product.type()); 

ただし、組み蟌みの䞍正なJavaScriptアラヌムは、オブゞェクトむンスタンスぞの盎接アクセスずプロパティの蚭定を確認するずトリガヌされたす。 長い間、クラスむンスタンスぞのプロパティのby意的な割り圓おを避けるために、バグず技術的芁件によっお教えられたした。これは、情報がそれらの間で確実に分散されるずいう事実に぀ながるためです。 たた、蚭定倀が返される順序には埮劙な違いがありたす。以䞋の䟋を参照しおください。

 console.log(product.type = "orange"); //logs "orange" console.log(product.type); //logs "fruit: orange" 

最初に“orange”がコン゜ヌルに衚瀺され、次に“fruit: orange”が衚瀺されるこずに泚意しおください。 蚭定倀が返される間、ゲッタヌは実行されたせん。そのため、この圢匏の省略された曞き蟌みでは、問題が発生する堎合がありたす。 set返される倀は無芖されたす。 return this.type;远加return this.type; setするず、この問題は解決したせん。 これは通垞、セットポむントを再利甚するこずで解決されたすが、ゲッタヌを持぀プロパティの問題が発生する可胜性がありたす。

defineProperty


構文get propertyname ()はオブゞェクトリテラルで機胜し、前の䟋ではProduct.prototypeオブゞェクトProduct.prototypeを割り圓おたした。 これには䜕の問題もありたせんが、このようなリテラルを䜿甚するず、プロトタむプ呌び出しの連鎖が耇雑になり、継承が実装されたす。 リテラルを䜿甚せずにプロトタむプでゲッタヌずセッタヌを定矩するこずは可胜definePropertyを䜿甚しお

 /** * @param {string} prefix * @constructor */ function Product(prefix) { /** * @private * @type {number} */ this.prefix_ = prefix; /** * @private * @type {string} */ this.type_ = ""; } /** * @param {string} newType */ Object.defineProperty(Product.prototype, "type", { /** * @return {string} */ get: function () { return this.prefix_ + ": " + this.type_; }, /** * @param {string} */ set: function (newType) { this.type_ = newType; } }); 

jsfiddle

このコヌドの動䜜は、前の䟋ず同じです。 ゲッタヌずセッタヌを远加する代わりに、 definePropertyがdefinePropertyたす。 definePropertyの3番目の匕数はハンドルであり、 setおよびgetに加えおgetアクセシビリティを構成し、倀を蚭定する機胜を提䟛したす。 definePropertyを䜿甚するず、定数のようなものを䜜成できたす-削陀たたはオヌバヌラむドされないプロパティ。

 var obj = { foo: "bar", }; //A normal object property console.log(obj.foo); //logs "bar" obj.foo = "foobar"; console.log(obj.foo); //logs "foobar" delete obj.foo; console.log(obj.foo); //logs undefined Object.defineProperty(obj, "foo", { value: "bar", }); console.log(obj.foo); //logs "bar", we were able to modify foo obj.foo = "foobar"; console.log(obj.foo); //logs "bar", write failed silently delete obj.foo; console.log(obj.foo); //logs bar, delete failed silently 

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); //logs "bar" obj.foo = "foobar"; console.log(obj.foo); //logs "foobar" delete obj.foo; console.log(obj.foo); //logs undefined 

jsfiddle

configurableなキヌは、プロパティがオブゞェクトから削陀されるのを防ぎたす。 さらに、 defineProperty別の呌び出しによるプロパティぞの埌続の倉曎を防ぐこずができたす。 writableキヌを䜿甚するず、プロパティぞの曞き蟌みたたは倀の倉曎ができたす。

configurable false蚭定されおいる堎合デフォルト、 definePropertyを2回呌び出すず、゚ラヌがスロヌされたす。

 var obj = {}; Object.defineProperty(obj, "foo", { value: "bar", }); Object.defineProperty(obj, "foo", { value: "foobar", }); // Uncaught TypeError: Cannot redefine property: foo 

jsfiddle

configurable trueに蚭定されおいるtrue 、将来プロパティヌを倉曎できたす。 これは、曞き蟌み䞍可のプロパティの倀を倉曎するために䜿甚できたす。

 var obj = {}; Object.defineProperty(obj, "foo", { value: "bar", configurable: true, }); obj.foo = "foobar"; console.log(obj.foo); // logs "bar", write failed Object.defineProperty(obj, "foo", { value: "foobar", configurable: true, }); console.log(obj.foo); // logs "foobar" 

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")); //console logs true console.log(inventory.propertyIsEnumerable("strawberries")); //console logs false 

jsfiddle

propertyIsEnumerable呌び出しは、プロトタむプチェヌンで䞊蚘で定矩されたプロパティ、たたはこのオブゞェクトに察しお他の方法で定矩されおいないプロパティに察しおも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(); //logs "foobar" 

jsfiddle

Object.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(); //logs "protoBar" foo.instanceLog(); //logs "instanceBar" 

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(); //logs "instanceBar" 

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); //logs ["foobar"] foo.propertyArray.push("foobar"); console.log(bar.propertyArray); //also logs ["foobar"] 

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); //logs ["foobar"] foo.propertyArray.push("foobar"); console.log(bar.propertyArray); //logs [] 

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(); //old way using instanceof works with constructors console.log(foo1 instanceof Foo); //logs true //You check against the prototype object, not the constructor function console.log(Foo.prototype.isPrototypeOf(foo1)); //true var foo2 = Object.create(prototypeDef, propertiesDef); //can't use instanceof with Object.create, test against prototype object... //...given as first agument to Object.create console.log(prototypeDef.isPrototypeOf(foo2)); //true 

jsfiddle

isPrototypeOfはプロトタむプチェヌンを䞋降し、比范察象のオブゞェクトず䞀臎するものがあれば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); //logs "foo bar" console.log(foo1Proto.isPrototypeOf(foo)); // logs true console.log(foo2Proto.isPrototypeOf(foo)); // logs true 

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); // logs Object {foo: "foo", bar: "bar"} Object.preventExtensions(obj); delete obj.bar; console.log(obj); // logs Object {foo: "foo"} obj.bar = "bar"; console.log(obj); // still logs Object {foo: "foo"} obj.foo = "foobar" console.log(obj); // logs {foo: "foobar"} can still change values 

jsfiddle

オブゞェクトの最終倀のみがコン゜ヌルに衚瀺されるため、開発者コン゜ヌルを開いた状態で以前のjsfiddleを再起動する必芁があるこずに泚意しおください

Object.sealはさらにObject.seal進みたす。 Object.preventExtensionsよりも。 このメ゜ッドは、オブゞェクトぞの新しいプロパティの远加を犁止するこずに加えお、既存のプロパティをさらに構成および削陀する機胜も制限したす。 オブゞェクトが封印されるず、 defineProperty既存のプロパティを倉曎できなくなりたす。 䞊蚘のように、strictモヌドでこれらの犁止事項に違反するず、゚ラヌがスロヌされたす。

 "use strict"; var obj = {}; Object.defineProperty(obj, "foo", { value: "foo" }); Object.seal(obj); //Uncaught TypeError: Cannot redefine property: foo Object.defineProperty(obj, "foo", { value: "bar" }); 

jsfiddle

たた、プロパティが元々カスタマむズ可胜であったずしおも、プロパティを削陀するこずはできたせん。 あずは、プロパティ倀を倉曎するだけです。

 "use strict"; var obj = {}; Object.defineProperty(obj, "foo", { value: "foo", writable: true, configurable: true, }); Object.seal(obj); console.log(obj.foo); //logs "foo" obj.foo = "bar"; console.log(obj.foo); //logs "bar" delete obj.foo; //TypeError, cannot delete 

jsfiddle

最終的に、 Object.freezeはオブゞェクトを倉曎から完党に保護したす。 凍結された「オブゞェクト」のプロパティ倀を远加、削陀、たたは倉曎するこずはできたせん。 Object.definePropertyを䜿甚しおオブゞェクトの既存のプロパティの倀を倉曎する方法もありたせん。

 "use strict"; var obj = { foo: "foo1" }; Object.freeze(obj); //All of the following will fail, and result in errors in strict mode obj.foo = "foo2"; //cannot change values obj.bar = "bar"; //cannot add a property delete obj.bar; //cannot delete a property //cannot call defineProperty on a frozen object Object.defineProperty(obj, "foo", { value: "foo2" }); 

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"); //logs "foobar" 

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); //logs 4 (length of "foo" + 1); 

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"); //logs "3bar" instead of "foobar" console.log(1 + f); //logs 4 (length of "foo" + 1); 

jsfiddle

toStringを䜿甚する適切な方法は、オブゞェクトをハッシュ可胜にするこずです。

 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); //logs {foo: true} 

jsfiddle

getOwnPropertyNamesおよびキヌ



オブゞェクトのすべおのプロパティを取埗するには、 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)); //logs ["foo", "bar"] console.log(Object.keys(obj)); //logs ["foo"] 

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]); //logs "foobar" 

jsfiddle

Symbolはナニヌクで䞍倉です

 //console logs false, symbols are unique: console.log(Symbol("foo") === Symbol("foo")); 

jsfiddle

SymbolはObject.definePropertyで䜿甚できたす

 var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); console.log(obj[foo]); //logs "foobar" 

jsfiddle

Symbol定矩されたプロパティはfor inルヌプで繰り返されたせんが、 hasOwnProperty呌び出しは正垞に機胜したす。

 var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); console.log(obj.hasOwnProperty(foo)); //logs true 

jsfiddle

SymbolはObject.getOwnPropertyNames関数によっお返される配列に入りたせんが、 Object. getOwnPropertySymbolsメ゜ッドがありObject. getOwnPropertySymbols Object. getOwnPropertySymbols

 var obj = {}; var foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); //console logs [] console.log(Object.getOwnPropertyNames(obj)); //console logs [Symbol(foo)] console.log(Object.getOwnPropertySymbols(obj)); 

jsfiddle

Symbolを䜿甚するず、偶発的な倉曎からプロパティを保護するだけでなく、通垞の操䜜䞭に衚瀺したくない堎合にも䟿利です。 可胜性のあるすべおの機䌚に぀いお真剣に考えたこずはありたせんが、ただただあるず思いたす。

プロキシ



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); //logs "foo" console.log(p.bar); //logs "foobar" console.log(p.asdf); //logs "foobar" 

jsfiddle

この䟋では、 objオブゞェクトをプロキシしおいたす。 䜜成されたオブゞェクトずの盞互䜜甚を凊理するhandlerオブゞェクトを䜜成したす。 get handlerメ゜ッドは非垞に簡単です。 オブゞェクトず、アクセスされるプロパティの名前を受け取りたす。 この情報はい぀でも返すこずができたすが、この䟋では、キヌがある堎合は実際の倀が返され、キヌがない堎合はfoobarが返されたす。 私は、 Scalaようなswitchようなものの1぀である、プロキシを䜿甚する可胜性ず興味深い方法の巚倧なフィヌルドを芋おいたす。

プロキシの別のアプリケヌションはテストです。 get加えhas 、 set 、 has 、および他のハンドラヌhasありたす。 プロキシがより良いサポヌトを埗るずき、私は圌らに私のブログに党䜓の投皿をするこずをheしたせん。 MDNプロキシのドキュメントを芋お、蚘茉されおいる䟋に泚意するこずをお勧めしたす。
ずりわけ、jsconfからの優れたプロキシレポヌトもありたす。 スラむド

JavaScriptでオブゞェクトを䜿甚する方法は、ランダムデヌタを単に保存するよりも倚くありたす。 プロパティを定矩するための匷力な方法は既に利甚可胜であり、将来、JavaScriptコヌドの蚘述方法をプロキシがどのように倉曎できるかを考えるずわかるように、さらに興味深いものがありたす。 明確化やコメントがありたしたら、それに぀いお私に知らせおください。ここに私のツむッタヌがありたす@bjorntipling。

Source: https://habr.com/ru/post/J241465/


All Articles