2016-12-06 12 views
-1

HTMLページで出力インターフェースを作成したいのですが、そのプロパティーを定義するヘルプがありますが、プロパティーの名前で変数を設定する方法はわかりません。definePropertyの値を文字列名で設定する方法は?

var _root = {}; 
var value = 2; 

Object.defineProperty(_root, "MyProperty", { 
    get: function(){ 
     return value;  
    }  
    , 
    set: function(val){ 
     value = val;  
    }, 
    enumerable: true, 
    configurable: true 
}); 

function SetValue(nameProperty , value ){ 
    nameProperty = value; 
} 

function GetValue(nameProperty){ 
    return eval(nameProperty); 
} 

SetValue("_root.MyProperty","35"); // This function is called from C# webBrowser.Document.InvokeScript("SetValue" , new Object[]{"_root.MyProperty","35" });  

console.log(GetValue("_root.MyProperty")); 

編集 私はevalので値を設定しようとしましたが、それは動作しません。

function SetValue(nameProperty , value ){ 
    var ob = eval(nameProperty); 
    ob =value; 
} 
+2

コードが機能しています。どうしたの? – Andrew

+0

私は値を設定する必要がありますが、プロパティは文字列でしか知りません。たとえば、eval( "_ root.MyProperty")= 34が機能しない – askeet

+0

'defineProperty(_root、propname、{...})' –

答えて

0

私は解決策に私の問題を発見しました。

function SetValue(nameProperty , value ){ 
    nameProperty = nameProperty.replace("_root.",''); 
    _root[nameProperty] = value; 
} 
SetValue("_root.MyProperty","35"); 
0

stringsで渡しているものを引用符で囲んでいます。最初の属性としてオブジェクトプロパティを渡し、2番目の属性として数値を渡したいとします。しかし、あなたは基本的に無意味なテキストを渡しています。

はこれを試してみてください:

SetValue(_root.MyProperty, 35); 
console.log(GetValue(_root.MyProperty)); 
+0

申し訳ありませんが、私はあなたを理解していないかもしれませんが、_root.MyProperty iitは文字列。プロパティの任意の値を設定するためには、function(NamePropeptyByName、setValue)を使用する必要があります。 – askeet

+0

@askeet - あなたが何を言っているのか分かりません。そのような関数はあなたの質問には現れません。実際、あなたの質問のコードは機能します。 – Andrew

+0

私はクエストを修正しました。 – askeet

関連する問題