JavaScript的函数构造函数的局限性

时间:2014-11-20 21:48:10

标签: javascript

这是奇怪的事情,我不知道如何克服它。

基本上,我在这里有这个字符串:

var s = 'var Bla = {variable: true, get: function() { return this.variable;}}; return Bla;'

并使用Function构造函数来解析此构造。

var fn = new Function(s);

效果很好,除了内部功能' get'已经不在了...就像它没有被解析一样?!

fn().variable  -> is there and returns "true".
fn().get  -> is undefined, not existing.

有什么想法吗?

PS:我编辑了我的原始问题,以表明他们真正缺少的是什么。

2 个答案:

答案 0 :(得分:4)

您发布的代码相当于:

var fn = function() {
    var Bla = {
        variable: true, 
        get: function() { 
            return this.variable;
        }
    };
    return Bla;
}

因此,您无法直接使用fn.variablefn.get - 而是需要调用该函数:

var x = fn();
alert(x.get()); //alerts true
x.variable = 1;
alert(x.get()); //alerts 1

Bla只是函数中的局部变量,不会从中返回。代码很容易就是:

var fn = function() {
    return {
        variable: true, 
        get: function() { 
            return this.variable;
        }
    };
}

你会得到同样的效果。调用该函数后,从中返回的对象包含variableget

example object

答案 1 :(得分:0)

你的例子很好。

我试过并发出:

fn().get()

按照您的预期返回true。