JavaScript で変数を共有する
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ getter と setter を使って同じ実体を読み書きするだけ
◆ PHP の & 参照みたいな動きができる
◆ プロパティなのでローカル変数はムリ (グローバル変数はOK)
◆ PHP の & 参照みたいな動きができる
◆ プロパティなのでローカル変数はムリ (グローバル変数はOK)
普段あまりつかわない getter と setter を使ってみます
特に複雑なことしてるわけじゃないですが getter と setter で読み書きする実体を共有させることで 別のオブジェクトのプロパティを共有してるように見せかけられます
使うときは関数を通さないでプロパティを扱ってるだけなのに 変更すると他の変数まで変更されてるので参照つけてるようなことができます
何かに使えそうです 具体的にはよくわからないですが 何かにです
特に複雑なことしてるわけじゃないですが getter と setter で読み書きする実体を共有させることで 別のオブジェクトのプロパティを共有してるように見せかけられます
var defineSharedValue = function(){
var store = {}
var getter = function (id){return function(){return store[id]}}
var setter = function (id){return function(val){return store[id]=val}}
return function(obj, property, id){
Object.defineProperty(obj, property, {set: setter(id), get: getter(id)})
}
}()
var obj1 = {a:12}
var obj2 = {x:88}
defineSharedValue(obj1, "b", "abcde")
defineSharedValue(obj2, "y", "abcde")
obj1.b // undefined
obj2.y // undefined
obj1.b = 12
obj1.b // 12
obj2.y // 12
obj2.y = 34
obj1.b // 34
var store = {}
var getter = function (id){return function(){return store[id]}}
var setter = function (id){return function(val){return store[id]=val}}
return function(obj, property, id){
Object.defineProperty(obj, property, {set: setter(id), get: getter(id)})
}
}()
var obj1 = {a:12}
var obj2 = {x:88}
defineSharedValue(obj1, "b", "abcde")
defineSharedValue(obj2, "y", "abcde")
obj1.b // undefined
obj2.y // undefined
obj1.b = 12
obj1.b // 12
obj2.y // 12
obj2.y = 34
obj1.b // 34
使うときは関数を通さないでプロパティを扱ってるだけなのに 変更すると他の変数まで変更されてるので参照つけてるようなことができます
何かに使えそうです 具体的にはよくわからないですが 何かにです