2016-12-06 1 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. Вы хотите передать свойство объекта в качестве вашего первого атрибута, а число - как второе. Но вы в основном передаете бессмысленный текст.

Попробуйте это:

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

Извините, может быть, я вас не понимаю, но _root.MyProperty iit не строка. Для установки любого значения свойства я должен использовать функцию (NamePropeptyByName, setValue); – askeet

+0

@askeet - Я понятия не имею, о чем вы говорите. В вашем вопросе такая функция не появляется, и на самом деле код в вашем вопросе работает. – Andrew

+0

Я исправил свой квест. – askeet

Смежные вопросы