2011-11-07 51 views
3

我正在尝试为Web应用程序编写一些JavaScript函数。如何在javascript中访问parent函数的公共属性?

继从这里的建议: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”功能里面,什么是引用“回调”属性的最佳方式?

回答

4

随着代码写的,没有没有。

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

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 
    } 
... 
+0

谢谢,这看起来像它会做的伎俩很好。出于兴趣,为什么厌恶新关键字。我的理解对新关键字的一般含义非常模糊。在这种情况下,它似乎运行该函数并返回其“this”范围,这正是我想要的情况。 (为了能够例如从我的代码中的其他地方触发title_picker.show())。 – Chris

+0

@Chris - 您正在使用函数表达式。当你调用你之前定义的函数时,你会使用'new',你将像使用类一样使用...和argh。不,我认为你需要这个“这个”。我从来没有见过任何人使用这样的函数*表达式*。 – Quentin

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,道场,原型...)

相关问题