2
var obj = {a:1,b:2};
function parent_object(num){
    console.log('This number is inside the object ',<????>);
}
parent_object(obj.a)

これは、objを指すように出力する必要があります。これを行うために私が見つけた唯一の方法は、親への参照を保持するオブジェクト内のすべての数値オブジェクトをボックス化することです。ただし、これはパフォーマンスのキラーです。番号の場所を追跡するためのより良い方法はありますか?

4

3 に答える 3

3

実は違う。そして、JavaScriptだけでなく、他の従来の言語でもありません。

私の知る限り、唯一の方法は、自分が言ったことを正確に実行することです。オブジェクト内の数値(またはその他のフィールドタイプ)をボックス化して、それを囲む親への参照(おそらくコンストラクターの注入による)を保持します。

問題のボクシングはこうして達成することができます:

BoxedValue = function(value, parent) {
    this.value = value;
    this.parent = parent;
}

var i = {};
n.i = new BoxedValue(12, i)
console.log(i.n.parent);

ただし、一般的に言えば、現在のブラウザでのJavaScriptアプリケーションのパフォーマンスで最も重要な要素は、メモリ使用量の処理方法です。したがって、このアプローチは実際にはお勧めできません。問題が何であれ、他の方法で問題を解決することをお勧めします。

于 2012-08-25T17:32:43.247 に答える
0

複数の場所からオブジェクトを相互に参照させることができるため、これを行う方法はありません。

var num = 1;
var obj = {a: num, b: 2};
var obj2 = {x: num};

parent_object(obj.a);    // should it return obj or obj2? Both are technically correct!

ここで本当に何を解決しようとしていますか?おそらくあなたが利用できるより良いアプローチがあります。

于 2012-08-25T17:33:02.620 に答える
0
var obj = {a:1,b:'string',c:2} 
for(prop in obj){
  if(typeof obj[prop]=='number'){
    console.log(prop + ' : ' + obj[prop] + ' found')
  }
}

ログ:

a:1が見つかりました

c:2が見つかりました

于 2012-08-25T17:35:29.423 に答える