javascript eval怎么样

Myk*_*ych 3 javascript

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
};
Run Code Online (Sandbox Code Playgroud)

'委托' - 委托函数调用,如何在不同的上下文中"委托引用"和"取消引用"的可能性?


这里的更新是使用eval的两种可能性:
1.eval.call(null,'在全局上下文中计算表达式');
2. eval('在上下文中评估表达式,其中调用eval函数')
3.如何在某些预定义的"上下文"中进行评估?

我想模仿C++引用,当你可以将它放在任何上下文中并"取消引用"值时(但是当你取消引用时,它的值可能会改变,你应该得到新的值).就像在javascript中一样,你把对象作为函数参数,只要你得到obj.someproperty,你就会得到最新的someproperty值(如果它被改变了).但是当你试图传递一个原语或者如果整个对象被其他一些对象改变时,这将不起作用.如何将"引用"传递给"整个对象"到其他一些上下文?

清楚地了解我想要的东西:)
javascript如何创建参考

我在找什么:

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());
Run Code Online (Sandbox Code Playgroud)

坦克Brianpeiris!

bri*_*ris 5

这应该这样做,不需要eval:

var obj = {x: 2};
var value = obj['x'];
Run Code Online (Sandbox Code Playgroud)