2012-04-22 65 views
-1

我可以做在Javascript东西,机器会自动改变这个:总是转换为对象

var x = 0; 

为以下(但只在memory--我不想改变“查看源文件”):

var x = {Value: 0}; 

对于为例:

var x = { Value: 0 }; 

function a(x) //This function doesn't work if the parameter is not an object, and it would be better if I didn't have to write { Value: 0 } 
{ 
    x.Value++; 
} 
a(x); 
alert(x.Value); 
+1

你能不能给我们的,你会如何用一个例子那? – georg 2012-04-22 09:11:18

+0

“如果我不必写”需要对象的对象,那会更好?!?只需在函数中使用'typeof x' – Aprillion 2012-04-22 09:21:26

+0

否,我的意思是变量仍然是一个对象,但对象的声明是自动的 – user1342369 2012-04-22 09:23:51

回答

0

看看watchObject.watch() for all browsers?如:

var a = function (x) { 
    x.value++; 
}; 
var myVariables = {}; 
myVariables.watch("x", function (prop, oldval, newval) { 
        if (typeof newval !== 'object') { 
         return {"value": newval}; 
        }; 
       }); 
myVariables.x = 0; 
a(myVariables.x); 
alert(myVariables.x.value); 
+1

**手表**功能是非标准的,最好避免。 – McGarnagle 2012-04-22 09:51:20

+0

@dbaseman这就是为什么我添加了第二个链接;)) – Aprillion 2012-04-22 09:52:51

1

问题缺乏内容和细节,但也许不喜欢这样写道:

function transform(x) { 
    return { Value : x }; 
} 

然后

x = transform(x); 
+0

我可以将每个变量的声明与这个函数关联吗? – user1342369 2012-04-22 09:15:31

+2

不,你不能重写Javascript中的变量声明行为,你需要手动装饰变量声明或在其他端点执行变换(例如,拥有自己的console.log()) – 2012-04-22 09:24:51