这里的第一个问题是凌晨3:30,所以当我试着解释我的问题时,请耐心等待。
我遇到的情况是我需要一个非常大的javascript对象。好的做法告诉我除非绝对必要,否则我不应该向窗口对象暴露任何东西。
我制作的这个对象需要某种自定义(设置)和一个包含不同类型的自定义(级别)的对象。第一个目标并不是那么大,但第二个目标变得相当大,并且将来会变得更大。
我认为将这些对象拆分成不同的文件并希望使用browserify会很好。不过我不希望窗口范围内有两个对象。
// settings.js
var settings = {
"setting1": "hellp",
"setting2": "world"
}
module.exports = settings;
//levels.js
var levels = {
"level1": {
name: "level1",
type: "flat",
},
"level2": {
name: "level2",
type: "hills"
} //about 10 more...
}
module.exports = levels;
//world.js
var world = function() {
var self = this;
var settings = require('settings.js');
var levels = require('levels.js');
self.test = function() {
console.log(settings['setting1'] + " " + settings['setting2']; console.log(levels['level1'].name);
}
return self;
}
我使用browserify和gulp将其附加到一个/dist/world.js中,但是在测试html页面中它始终显示“world is undefined”,而当我自己附加文件时它确实有效。
我认为我在浏览器中做错了,但我使用的gulp任务适用于其他项目:
function handleError(level, error) {
gutil.log(error.message);
process.exit(1);
}
// Convenience handler for error-level errors.
function onError(error) {
handleError.call(this, 'error', error);
}
gulp.task('browserify', function () {
var b = browserify({
entries: './main.js',
paths: ['./www-src'],
debug: true
});
return b.transform(p)
.bundle()
.on('error', onError)
.pipe(source('main.js'))
.pipe(buffer())
.pipe(gulp.dest('./dist/'));
});
基本上我在index.html中调用的是:
//index.html
var world = new world();
world.test()
它会引发“世界未定义”错误
有人能够给我任何指示如何解决这个问题吗?非常感谢任何帮助!
更新: 我知道IFFE意味着立即调用函数表达式,换句话说就是一个立即执行的函数。我没有得到的是如何访问它。