2014-10-01 82 views
0

考虑我下面的对象和方法:简单的JavaScript对象范围问题

function ModalPopupWindow() { 
    this.Modal = false; 

    function __InitModalPopUp(height, width, title) { 

     if(this.Modal != true){ 
      divOverlay.onclick = function() { window.parent.HideModalWindow(); }; 
     } 
    }  
} 

乳清我尝试评估ModalPopupWindow对象的初始化函数里面this.modal属性,“这”是引用到窗口,而不是对象的属性。我怎样才能得到这个价值?

+0

当您创建对象时使用“新” – dandavis 2014-10-01 23:44:35

+0

您在哪里调用'__InitModalPopUp'?这个指的是什么取决于函数是如何被调用的。了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/这个 – 2014-10-01 23:45:51

回答

0

有几种技术,包括一个叫绑定()的方法。另一种方法是在函数被调用之前创建一个变量并将其绑定到父上下文。我见过的人使用一个名为下划线变量这(_this)

function ModalPopupWindow() { 

//Capture the correct "this" 
var _this = this; 

this.Modal = false; 

function __InitModalPopUp(height, width, title) { 

    //Use _this here 
    if(_this.Modal != true){ 
     divOverlay.onclick = function() { window.parent.HideModalWindow(); }; 
    }  
} 

} 

,如果你想了解更多关于JavaScript的工作原理,以及如何使用绑定(我推荐这篇文章)。 http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals/

+0

不要忘记制作'_this' * local *。 – 2014-10-01 23:48:04

+0

@Felix。谢谢! – ahoffer 2014-10-01 23:49:48