通过chrome控制台与javascript交互

时间:2016-07-19 05:15:54

标签: javascript

我使用购物车API构建电子商务网站。创建者创建了一个sdk然后你必须为其他一些函数制作你自己的.js文件。

调试时我会在我的.js文件中的任何地方插入一个console.log(),这样我就可以调试对象选项等等。

但是我希望能够将sdk用作实时工具,因此我不必使用新的$(function() { EVERYTHING });行编辑我的.js文件,而是只能输入对象.color_code并让控制台输出该字符串作为对象颜色代码。目前虽然它只是给了我未捕获的引用错误,但是没有定义对象。

我认为这是因为我的自定义.js文件在console.log SO中包含了所有的脚本,当我尝试从控制台调用任何东西时,它说它未定义,但如果我只是在一切中使用int[] numbers = {20, 30, 40, 50, 60, 70}; int rotateBy = 3; int[] rotated = new int[numbers.Length]; Array.Copy(numbers, rotateBy, rotated, 0, numbers.Length-rotateBy); Array.Copy(numbers, 0, rotated, numbers.Length - rotateBy, rotateBy); 它会起作用。那么有什么方法可以解决这个问题吗?

随意解释为什么它不起作用,但我想要一种方法来实现这一点,不要告诉我没有方法,即使我必须加上前缀我希望每次来自.js文件,我都不介意

4 个答案:

答案 0 :(得分:2)

你是正确的,因为函数内的所有变量都只在本地定义,因此无法通过控制台访问。但是,在Javascript中,至少有两个选项可以从内部函数设置全局变量;如果您使用这些来声明要从函数外部访问的变量,它将起作用:

  1. 为未声明的变量指定值:varname=value;

  2. 将变量分配给window对象:window.varname=value;window['varname']=value;

答案 1 :(得分:1)

可能的解决方法是在全局范围中公开要调试的对象:



(function() {
  var privateStuff = { foo: 'bar' };
  // make privateStuff public for debugging purposes
  window['debugObject'] = privateStuff;
})(); 

document.write(debugObject.foo);




如果要公开具有可能与现有名称冲突的相当常见名称的多个对象,请确保使用不常见的名称而不是直接在对象中公开它们:



(function() {
  var x = { str: 'this is' },
      y = { str: 'a test' };

  window['debugObject'] = {
    x: x,
    y: y
  };
})(); 

document.write(debugObject.x.str + ' ' + debugObject.y.str);




答案 2 :(得分:1)

如果您乐意更改源文件,那么您可以将 EVERYTHING 中要访问的内容导出为全局。

$(function() { 
  //EVERYTHING
  ...

  window.Ireply = window.Ireply || {};
  window.Ireply.object = object;
  ...
});

console.log(Ireply.object); // some object

答案 3 :(得分:0)

您可以更改

之类的声明
$(function(){
  var cart = {};
})

var cart;

$(function(){
  cart = {}    
})

或者

$(function(){
  var cart = {};
  window.cart = cart;
})

但是你要避免污染全局命名空间。您还需要注意在回调或循环中使用全局变量,在这些变量或循环中您可能会遇到意外行为,因为局部变量范围通常很重要,以保持本地