当前位置: 首页 > 面试题库 >

如何在javascript中动态访问本地范围?

锺离烈
2023-03-14
问题内容

如果要动态使用全局函数和变量,可以使用:

window[functionName](window[varName]);

是否可以对本地范围内的变量执行相同的操作?

这段代码可以正常工作,但是目前使用eval,我正在尝试其他方法。

var test = function(){
    //this = window
    var a, b, c; //private variables

    var prop = function(name, def){
        //this = window
        eval(name+ ' = ' + (def.toSource() || undefined) + ';');

        return function(value){
            //this = test object
            if ( !value) {
                return eval('(' + name + ')');
            }
            eval(name + ' = value;')
            return this;
        };

    };

    return {
        a:prop('a', 1),
        b:prop('b', 2),
        c:prop('c', 3),
        d:function(){
            //to show that they are accessible via to methods
            return [a,b,c];
        }
    };
}();

>>>test
Object
>>>test.prop
undefined
>>>test.a
function()
>>>test.a()
1 //returns the default
>>>test.a(123)
Object //returns the object
>>>test.a()
123 //returns the changed private variable
>>>test.d()
[123,2,3]

问题答案:

不,就像新月说的那样。在下面,您可以找到一个示例,该示例说明如何在不使用eval的情况下但使用内部私有对象进行实施。

var test = function () {
  var prv={ };
  function prop(name, def) {
    prv[name] = def;
    return function(value) {
      // if (!value) is true for 'undefined', 'null', '0', NaN, '' (empty string) and false.
      // I assume you wanted undefined. If you also want null add: || value===null
      // Another way is to check arguments.length to get how many parameters was
      // given to this function when it was called.
      if (typeof value === "undefined"){
        //check if hasOwnProperty so you don't unexpected results from
        //the objects prototype.
        return Object.prototype.hasOwnProperty.call(prv,name) ? prv[name] : undefined;
      }
      prv[name]=value;
      return this;
    }
  };

  return pub = {
    a:prop('a', 1),
    b:prop('b', 2),
    c:prop('c', 3),
    d:function(){
      //to show that they are accessible via two methods
      //This is a case where 'with' could be used since it only reads from the object.
      return [prv.a,prv.b,prv.c];
    }
  };
}();


 类似资料:
  • 问题内容: 我无法连接到以nginx入口运行的应用程序(Docker桌面赢10)。 nginx- ingress控制器容器正在运行,应用程序运行良好,并且我已经创建了一个入口。但是,当我尝试连接到本地主机上的应用程序时,出现“连接被拒绝”的提示。 我在日志中看到此错误: 我认为端口443已由其他应用程序使用,可能是zscaler安全性或skype。摘录自: 我不知道如何使入口工作。请帮忙! 我的入

  • 问题内容: 在Angular2中,您可以在其中有一个文件夹/ data /和一个json文件,并且可以在localhost:4200 / data / something.json中访问它。 在Angular4中不再可能。 任何想法如何使其起作用? 问题答案: 您可以使用此代码 这是您的本地json文件。 另请参阅angular-cli的changlog路径 https://github.com/

  • 问题内容: 假设我创建了一个类的实例,并想为其公共属性分配一些值。通常,这将是这样完成的: 但是,如果编写一个将类作为参数的函数,而我想动态地为该类的公共属性分配一些值,那就是通过变量和循环(不知道有多少个或被称为什么)。 ) 显而易见的是: 但这是行不通的。 有任何想法吗? 问题答案:

  • 这是我想做的一个非常简单的例子。这些数组是用服务器端代码生成的,我不知道哪些数组会在那里,除了它们总是‘array’后面跟一个数字。 用户从select-1中选择一个选项 然后我需要我的函数访问相应于select-1值的正确数组。在select-1中出现的每个选项都将有一个相应的数组。 如何编写函数以从正确的数组中获取值?我需要一些类似的东西 但我不知道怎么从这里到那里。 下面是一把实验用的小提琴

  • 问题内容: 我有一个化简器,为了计算新状态,我需要操作中的数据以及该化简器未管理的部分状态数据。具体来说,在下面将显示的减速器中,我需要访问该字段。 initialState.js: FormsReducer.js: index.js(根减速器): 如何访问此字段? 问题答案: 我将为此使用thunk,这是一个示例: 基本上,您会获得操作所需的所有数据,然后可以将该数据发送到减速器。