var obj = {x : 2}; eval.call(obj, 'x');//ReferenceError: x 未定义 如何更改最后一行以通过变量名获取值?
澄清
'x' - 某些 obj 上下文中的任何表达式,可能不是 obj 参数
原始问题
/**
* Guards 'this' when delegating method as a callback to others. Arguments aren't known beforehand and will be provided by consumer.
*/
delegate = function(context, func) {
return function() {
var args = [];
for ( var i = 0; i < arguments.length; i++)
args.push(arguments[i]);
func.apply(context, args);
};
};
reference = function (context, 'expression to evaluete to get reference value') {
... TODO
};
'delegate' - 委托(delegate)函数调用,如何在不同上下文中'delegate a reference'并可能'dereference'?
更新
这里有两种使用 eval 的可能性:
1. eval.call(null, '在全局上下文中计算表达式');
2. eval('在调用 eval 函数的上下文中计算表达式')
3. 如何在一些预定义的“上下文”中进行评估?
我想模仿 C++ 引用,当您可以将它放在任何上下文中并“取消引用”到值时(但是当您取消引用它时,值可能会更改并且您应该获得新值)。就像在 javascript 中一样,您将对象作为函数参数,并且只要您获得 obj.someproperty,您就会获得最新的 someproperty 值(如果它已更改)。但是当你试图传递一个原语或者整个对象将被其他人改变时,这将不起作用。如何将对“整个对象”的引用“传递”到其他上下文?
清楚地了解我想要什么:)
javascript how to create reference
我在找什么:
createReference = function(context, prop) {
return function() {
return context[prop];
};
};
Provider = function() {
};
Provider.prototype.x = 5;
Provider.prototype.getXRef = function() {
return createReference(this, 'x');
};
Provider.prototype.incrementX = function() {
this.x = this.x + 1;
};
var provider = new Provider();
var refX = provider.getXRef();
provider.incrementX();
alert(refX());
Brianpeiris 坦克!
最佳答案
这应该可以做到,不需要评估:
var obj = {x: 2};
var value = obj['x'];
关于javascript eval 如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810311/