V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zzNucker
V2EX  ›  问与答

JavaScript中如何在带有嵌套函数的函数中使用property方式执行该嵌套函数?

  •  
  •   zzNucker · 2014-01-16 23:56:11 +08:00 · 2756 次点击
    这是一个创建于 3971 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如这样定义的函数。

    function A(){

    function B(){

    }

    }

    我想在function A 中使用类似 Obj['B']()的方法访问函数B,有方法么。
    貌似作用域是封闭的,除非我是用this.b = function () {} 来主动添加到global object,否则没用。
    14 条回复    2014-08-22 15:55:16 +08:00
    clippit
        1
    clippit  
       2014-01-17 00:06:38 +08:00
    B 是局部变量,直接用就可以了呀~
    zzNucker
        2
    zzNucker  
    OP
       2014-01-17 00:09:37 +08:00
    @clippit 嗯嗯,主要是我有个地方有很多个函数名的字符串,调用起来不想用eval,感觉没啥好方法。
    clippit
        3
    clippit  
       2014-01-17 00:29:50 +08:00
    @zzNucker 可以存到一个 object 里面,比如 var inner_methods = {'b': b}; 这样,然后 inner_method['b'](); 就是用字符串形式访问了
    zzNucker
        4
    zzNucker  
    OP
       2014-01-17 00:37:21 +08:00
    @clippit 我现在就存到数组里了,当时是想这样行不行,强迫症了算。
    Mutoo
        5
    Mutoo  
       2014-01-17 00:45:51 +08:00
    function A(){

    function B(){
    console.log("I'm B");
    }
    this.B = B; // 脱裤子放屁
    this["B"]();
    }

    A();
    Mutoo
        6
    Mutoo  
       2014-01-17 00:47:07 +08:00
    function B(){}
    其实是
    var B = function(){};
    的语法糖
    FrankFang128
        7
    FrankFang128  
       2014-01-17 00:57:36 +08:00 via Android
    1 你以为jQuery为什么要占用$符号。
    2 永远不要在 JS 里滥用全局变量,除非你不得不这样做。
    FrankFang128
        8
    FrankFang128  
       2014-01-17 00:58:06 +08:00 via Android
    @Mutoo 这是两个不同的语句,不是糖。
    FrankFang128
        9
    FrankFang128  
       2014-01-17 01:03:06 +08:00 via Android
    给你的 utils 申请一个名称空间费多大的事?

    //utils.js
    myApp.utils = {
    func1:.....
    }

    // foo.js

    function bar(){
    var func1 = myApp.utils.func1
    func1()
    }
    FrankFang128
        10
    FrankFang128  
       2014-01-17 01:04:51 +08:00 via Android
    一个 App 用到两个全局变量都算多了。
    zzNucker
        11
    zzNucker  
    OP
       2014-01-17 02:05:00 +08:00
    @FrankFang128 我一个全局变量都没占用,也不想占用,所以才问这个。我这纯粹是想讨论想是否可能。 你的解决方案我知道可以,只是想问下是不是能访问到这种Obj。
    rekey
        12
    rekey  
       2014-01-17 07:33:39 +08:00 via Android
    你是想在a()里面还是外面使用。这很重要。你仔细看你的描述,我是理解不了的
    zzNucker
        13
    zzNucker  
    OP
       2014-01-17 21:28:32 +08:00
    @rekey A中
    ql9075
        14
    ql9075  
       2014-08-22 15:55:16 +08:00
    a 函数里 return { b : b} 。a调用这个属性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.