0

セキュリティ上の理由から、「ミラーリングされた」オブジェクトが必要です。つまり、オブジェクト A を作成し、A のコピーをシャロー クローンしてそれを B と呼ぶ場合、A のプロパティが変更されるたびに、B が自動的に更新されて変更が反映されることを望みますが、その逆はありません。つまり、一方向のプロパティ同期です。

私の質問: 私が気付いていない解決策がすでに世の中に出回っていますか?

observe-js ( https://github.com/polymer/observe-js ) でライブラリを実装することを考えていましたが、続行する前に周りに尋ねるべきだと思いました。ありがとう。

4

2 に答える 2

1

IE8 以前をサポートする必要がないと仮定すると、ゲッターを使用して最新のブラウザーでそれを行うことができます。

function proxy(src) {
  var p = {};
  Object.keys(src).forEach(function(key) {
    Object.defineProperty(p, key, {
      get: function() {
        return src[key];
      }
    });
  });
  return p;
}

var a = {
  foo: "Original foo",
  bar: "Original bar"
};
var b = proxy(a);

console.log(b.foo);    // "Original foo"
a.foo = "Updated foo"; // Note we're writing to a, not b
console.log(b.foo);    // "Updated foo"
于 2014-10-03T16:46:51.097 に答える
0

このためのプロトタイプ チェーンをセットアップできます。

var a = {};
var Syncer = function(){};
Syncer.prototype = a;
var b = new Syncer();

a.foo = 123;
b.foo; // 123

b.bar = 456;
a.bar // undefined

直接設定されていないプロパティはb、プロトタイプ オブジェクトで検索されますa

これを便利な関数でラップすることもできます:

var follow = function(source) {
  var Follower = function(){};
  Follower.prototype = source;
  return new Follower();
}

var a = {};
var b = follow(a);

a.foo = 123;
b.bar = 456;

a.foo; // 123
b.foo; // 123

a.bar; // undefined
b.bar; // 456
于 2014-10-03T16:59:46.853 に答える