我是javascript的新手(来自C / C ++ / Java),所以请耐心等待。
在我看来,linting是一件好事。但是,我得到了很多"未定义的变量/参考"错误,我不知道如何以一种好的/有效的方式解决这个问题。
让我们说我有一个用Html / Javascript编写的更大的项目。所以我想将它分成彼此依赖的js模块,例如:
common_utils.js (depends on external lib d3.js)
app1.js (depends on common_utils.js)
app2.js (depends on common_utils.js as well)
首先,没有办法将commmon_utils.js包含/引用到app1.js中,对吧?我只能使用html文件中的动态加载,对吗?
(我的意思是,不是那种奇怪吗?似乎最常见的事情...... !!(再次:我来自C ++ / Java))
好的,公平的,所以jslint / hint无法确定只有在加载d3.js时才会使用common_utils.js。没问题,我添加
全球d3
到我的jshint配置,因为所有内容都在'命名空间'之下。不漂亮,但没关系。
但是我的common_utils.js怎么样? 我不想为该文件中的每个函数定义手动添加linter异常。
如何在javascript中组织和开发项目,我是否完全错了?
非常感谢你的时间!
答案 0 :(得分:1)
关于如何在javascript中组织和开发项目,我是否完全错了?
不,你有钱。
听起来common_utils.js
在你的掌控之中,对吗?也就是说,这是你的代码?我现在假设它是现在。
请注意,这就是d3js正在做的,给予或接受的。以下是来自其网站的d3
命名空间的d3用法示例:
D3采用声明式方法,在任意集合上运行 节点称为选择。例如,您可以重写上面的循环 为:
d3.selectAll("p").style("color", "white");
看到d3
对象?你需要做同样的事情。
您应该在common_utils.js
中声明一个“父”对象,并将每个函数附加到它。 然后,您只需要在JSL /提示设置中声明一个全局,以获取所有的common_util.js
函数。
以下是两个快速的非OO示例。第一个可能是最直接的。
请注意,您执行需要
关键字及其第一个关注点之间的
function
(空格)。也就是说,var spam = function ()
在JSLint中是正确的而var spam = function()
不是。 JSLint认为第二个看起来像一个典型的命名函数,而不是赋值。很公平。
/*jslint browser: true, devel: true, sloppy: true, white: true */
var commonUtils = {}; // create the "parent" object.
// then add your functions to it, one by one.
commonUtils.test1 = function (myString) {
if (console.log) { console.log("myString is: " + myString); }
};
commonUtils.test2 = function (myString) {
window.alert("myString is: " + myString);
};
...或者 - 这是一个更常见的,我认为 - 你可以使用JSON表示法,一旦你得到上面的例子,这很容易理解:
/*jslint browser: true, devel: true, sloppy: true, white: true */
var commonUtils = {
test1: function (myString) {
if (console.log) { console.log("myString is: " + myString); }
},
test2: function (myString) {
window.alert("myString is: " + myString);
}
};
你也可以go full object oriented,如果这很重要,但现在听起来并不像你需要的那样。命名空间应该可以解决问题。
现在你可以用这样的代码调用......
/*jslint browser: true, devel: true, sloppy: true, white: true */
/*global commonUtils */
commonUtils.test1("console write");
commonUtils.test2("alert write");
您的全局列表中唯一的项目是commonUtils
,无论您在其命名空间中有多少函数。瞧。