通过chrome控制台与javascript交互
我正在使用购物车api建立一个电子商务网站。创建者制作了一个sdk,然后您必须为其他一些功能创建自己的.js文件 调试时,我会在.js文件的任何地方插入一个通过chrome控制台与javascript交互,javascript,Javascript,我正在使用购物车api建立一个电子商务网站。创建者制作了一个sdk,然后您必须为其他一些功能创建自己的.js文件 调试时,我会在.js文件的任何地方插入一个console.log(等),以便调试对象选项等 但我希望能够将sdk作为一个实时工具使用,因此,我不必使用新的console.log()行编辑我的.js文件,而只需键入object.color\u代码,并让控制台为对象颜色代码输出该字符串即可。目前,虽然它只是给了我一个未捕获的引用错误,但对象并没有定义 我认为这是因为我的自定义.js文件的
console.log(等)
,以便调试对象选项等
但我希望能够将sdk作为一个实时工具使用,因此,我不必使用新的console.log()
行编辑我的.js文件,而只需键入object.color\u代码,并让控制台为对象颜色代码输出该字符串即可。目前,虽然它只是给了我一个未捕获的引用错误,但对象并没有定义
我认为这是因为我的自定义.js文件的所有脚本都在$(function(){EVERYTHING})中因此,当我试图从控制台调用所有内容时,它会说它未定义,但如果我只是在所有内容中使用console.log
,它就会工作。有什么办法可以解决这个问题吗
请随意解释为什么它不起作用,但我希望有一种方法来启用它,不要告诉我没有方法,即使我必须在每次来自的.js文件中添加我想要的前缀,我不介意一种可能的解决方法是在全局范围中公开要调试的对象:
(函数(){
var privateStuff={foo:'bar'};
//将PrivateTuff公开以进行调试
窗口['debugObject']=privateStuff;
})();
document.write(debugObject.foo)代码>您可以更改如下声明
$(function(){
var cart = {};
})
到
或
但您将希望避免污染全局名称空间。您还需要小心在回调或循环中使用全局变量,因为局部变量的作用域通常是保持局部的,这一点是正确的,因为函数中的所有变量都是局部定义的,因此无法通过控制台访问。然而,在Javascript中,至少有两个选项用于从函数内部设置全局变量;如果使用这些来声明要从函数外部访问的变量,则该变量将起作用:
为未声明的变量赋值:varname=value代码>
将变量分配给窗口对象:window.varname=value代码>或窗口['varname']=值代码>
如果您愿意更改源文件,那么您可以将希望访问的任何内容作为全局文件从所有内容导出
$(function() {
//EVERYTHING
...
window.Ireply = window.Ireply || {};
window.Ireply.object = object;
...
});
console.log(Ireply.object); // some object
请举例说明您要记录的内容。抱歉,当然,sdk提供了一种创建客户端的方法,该客户端可连接到shopify以访问您的产品、库存、价格等。因此,当您创建客户机时,您可以执行client.fetchProduct(125871)或client.fetchAllproducts,它返回一个包含所有产品的数组,每个数组对象都有id、product\u id、variant\u id和weight。因此,在调试过程中,我编写了console.log(cart.lineItem.variant_id)如何通过控制台请求,我尝试了client.cart.lineItem.variant_id,但是是的..我猜您希望从控制台访问所有内容中的局部变量(对象)。。。您只需要在外部(在全局范围内)声明这些变量。您可以将您想要访问的任何内容声明为全局变量,以便进行测试。只是不要在函数中重新实例化它。使用带有断点的google chrome devtool:
$(function(){
var cart = {};
window.cart = cart;
})
$(function() {
//EVERYTHING
...
window.Ireply = window.Ireply || {};
window.Ireply.object = object;
...
});
console.log(Ireply.object); // some object