【问题标题】:How to access public property of parent function in javascript?如何在javascript中访问父函数的公共属性?
【发布时间】:2011-12-23 19:15:45
【问题描述】:

我正在尝试为 Web 应用程序编写一些 javascript 函数。

听从这里的建议:How do I declare a namespace in JavaScript?

我试图通过将所有内容包装在命名函数中来使代码不引人注目,但是在子匿名函数中访问父函数中的属性时遇到了困难。

例如:

var title_picker = new function(){
    // This property should be public
    this.callback=function(){};


    var ok=function(){
        var title = $('input#title').val();
        callback(title) // <--- 
    }
...

在“ok”函数中,引用“callback”属性的最佳方式是什么?

【问题讨论】:

    标签: javascript jquery namespaces


    【解决方案1】:

    按照编写的代码,没有。

    您可以从父级范围访问变量,除非它们在更窄的范围内被覆盖。

    this 总是被覆盖。

    您可以将this 复制到另一个仍在作用域内的变量:

    var title_picker = new function(){
    
        var self = this; // Copy this to a variable that stays in scope
    
        // This property should be public
        this.callback = function(){};
    
    
        var ok=function(){
            var title = $('input#title').val();
            self.callback(title) // self is still in scope
        }
    ...
    

    【讨论】:

    • 谢谢,看起来它可以很好地解决问题。出于兴趣,为什么厌恶新关键字。我的理解对于 new 关键字的一般作用非常模糊。在这种情况下,它似乎运行函数并返回它的“this”范围,这就是我在这种情况下想要的。 (例如,能够从我的代码中的其他地方触发 title_picker.show())。
    • @Chris — 您正在使用函数表达式。当你调用一个你之前定义的函数时,你使用new,你将像一个类一样使用......和啊。不,我认为你需要this。我只是从未见过有人使用这样的函数表达式
    【解决方案2】:

    大概是这样的:

    var title_picker = new function(){
        // This property should be public
        this.callback=function(){};
        var that = this;
    
    
        var ok=function(){
            var title = $('input#title').val();
            that.callback(title) // <--- 
        }
    ...
    

    虽然有很多框架可以为你做这种事情(yui、dojo、prototype...)

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多