2016-09-22 21 views
1

我不确定如何在Web浏览器(chrome)控制台中调用这些函数,例如inventoryCheck,看起来不可见。有没有办法我可以这样称呼?谢谢!如何调用不在范围内但使用.call(this)的javascript方法

下面是一个javascript文件的片段。

(function() { 
    var CC, addToBagCheck, addToCartError, addToCartRequest, addToCartSuccess, availableSizes, displayCorrectShoe, inventoryCheck, isValidJSON, processInventory, selectSize, showBuy, showError, showSoldOut, 
     slice = [].slice, 
     bind = function(fn, me) { 
      return function() { 
       return fn.apply(me, arguments); 
      }; 
     }; 

    inventoryCheck = function() { 
     return availableSizes(function(product) { 
      return processInventory(product); 
     }); 
    }; 

    window.captchaResponse = function(response) { 
     $('#captcha').addClass('checked'); 
     $('#flashproductform').append('<input class="captcha-duplicate" type="hidden" name="x-PrdRt" value="' + response + '">'); 
     return addToBagCheck(); 
    }; 

}).call(this); 
+0

你为什么要手动绑定? – haim770

回答

1

你不能。 inventoryCheck在闭包内定义。为了全局调用它们(如在控制台中),必须在window对象上定义它们。由于您的闭合似乎有window作为它的背景下(通过使用this作为上下文调用它),那么你可以定义inventoryCheck,如:

this.inventoryCheck = function(){...} 

需要注意的是全局对象上定义的东西是一个坏主意。考虑将所有内容都附加到您拥有的单个全局对象上。这可以将全局对象的占用空间减少到仅仅一个对象。以下模式更好:

;(function(ns){ 

    ns.inventoryCheck = function(){...} 

    // the rest of the code 

})(this.myGlobal = this.myGlobal || {}); 

// Usage 

myGlobal.inventoryCheck(...); 
+0

谢谢!我认为调用window.captchaResponse也是一个不好的现象吗? – hello

+0

要添加到此,captchResponse添加到上述代码中的窗口对象,因此将通过window.captchResponse()可用。但上述建议是向窗口添加内容的更好方式。 – user2263572

+0

@hello您的'window.captchaResponse'是个例外。因为没有什么东西是遮蔽'window',所以'scope'中的'window'就是全局'window'。这意味着您正在全局定义'captchaResponse'(即它将在​​控制台上可见)。但是,如前所述,附加到全球是一个坏主意。 – Joseph

相关问题