2016-12-06 65 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,{...})' – 2016-12-06 06:49:17

回答

0

我找到了解决我的问题。

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

你正在用引号括起来,这是在strings传递的东西。你想传入对象的属性作为你的第一个属性,并将数字作为你的第二个属性。但你基本上传递了毫无意义的文本。

试试这个:

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

对不起,也许我不明白你,但_root.MyProperty IIT不串。为设置任何值的属性,我必须使用函数(NamePropeptyByName,setValue); – askeet

+0

@askeet - 我不知道你在说什么。没有这样的功能出现在你的问题中,而实际上你的问题中的代码工作。 – Andrew

+0

我纠正了我的追求。 – askeet

相关问题