以下代码示例,如果不用 window 如何,在别的 .js 文件里引用呢?
// app.js
// ------
(function() {
require(['router'], function(router) {
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
window.onload = this.onDeviceReady();
},
onDeviceReady: function() {
main.receivedEvent('deviceready');
},
receivedEvent: function(event) {
switch (event) {
case 'deviceready':
app.initMian();
break;
}
},
initMian: function() {
// 不用 window 如何把这货在别的 .js 里可用?
window.db = openDatabase('db', '1.0', 'description', 10240);
window.$ = jQuery;
}
};
app.initialize();
});
})();
1
whatisnew OP 在另外一个文件,比如,router.js
我就可以用 $('.element').on('event', function... 我就可以用 db.transaction(function(tx) { ... |
2
yangff 2015 年 4 月 18 日 via Android
export?
|
3
haozhang 2015 年 4 月 18 日
用命名空间啊,你暴露一个变量在全局环境里面,所有东西挂在那个变量上面。
|
4
jarlyyn 2015 年 4 月 18 日
把你所有的js放在一个闭包/空间里呢?
我觉得直接用window.db不如直接用windows.myapp.db. |
7
lk09364 2015 年 4 月 18 日
@whatisnew
> 那这样的话,除了名字不叫 window 有什么区别么。。 对,没有,不过这样就不会和别的库冲突了。 node.js 里的 export 容许你 require() 出来,并自定义变数名称,这样就绝对不会冲突—— |
9
whatisnew OP @wxt2005 就是只有在 app.js 这个文件里才用 window,其他都是 require 出来的 mvc 文件,但是在 model 和 controller 这层要用到 db 这些变量,因为不可能每 new 一次都 open 一下 db 啊
|
10
haozhang 2015 年 4 月 18 日
去看看YUI...了解下明明空间。
|
11
haozhang 2015 年 4 月 18 日
命名空间 ...
|
13
NemoAlex 2015 年 4 月 19 日
你 @ 了我,所以我进来看了一下
但是看完,我都不知道说什么好了 所以就这样吧 |
14
ghbjy1128 2015 年 4 月 25 日
楼主的问题其实就是Js设计模式的问题,现在有很多流派,自己随便选个自己喜欢的就可以。
个人偏好还是定义一个命名空间,如果有什么需要外部调用的,return 就可以,大概这样子。 window.FUN = (window.FUN || {}); // Main Functions FUN = (function ($) { 'use strict'; function todo() { ... } return { todo: doing } }); ... FUN.doing(); |