@NemoAlex @Phariel 不要试图污染 window 除非你是一个框架级的东西 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
whatisnew
V2EX    Javascript

@NemoAlex @Phariel 不要试图污染 window 除非你是一个框架级的东西

  •  
  •   whatisnew 2015 年 4 月 18 日 3397 次点击
    这是一个创建于 3954 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下代码示例,如果不用 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(); }); })(); 
    14 条回复    2015-04-25 08:34:24 +08:00
    whatisnew
        1
    whatisnew  
    OP
       2015 年 4 月 18 日
    在另外一个文件,比如,router.js
    我就可以用 $('.element').on('event', function...
    我就可以用 db.transaction(function(tx) { ...
    yangff
        2
    yangff  
       2015 年 4 月 18 日 via Android
    export?
    haozhang
        3
    haozhang  
       2015 年 4 月 18 日
    用命名空间啊,你暴露一个变量在全局环境里面,所有东西挂在那个变量上面。
    jarlyyn
        4
    jarlyyn  
       2015 年 4 月 18 日
    把你所有的js放在一个闭包/空间里呢?
    我觉得直接用window.db不如直接用windows.myapp.db.
    whatisnew
        5
    whatisnew  
    OP
       2015 年 4 月 18 日
    @haozhang 那这样的话,除了名字不叫 window 有什么区别么。。。
    @jarlyyn 那还不是 window...
    wxt2005
        6
    wxt2005  
       2015 年 4 月 18 日
    @whatisnew 暴露一个和暴露多个的区别吧。你现在是刚好只需要注册一个变量,所以感觉没啥区别,如果以后代码加了新的功能怎么办?
    lk09364
        7
    lk09364  
       2015 年 4 月 18 日
    @whatisnew
    > 那这样的话,除了名字不叫 window 有什么区别么。。
    对,没有,不过这样就不会和别的库冲突了。

    node.js 里的 export 容许你 require() 出来,并自定义变数名称,这样就绝对不会冲突
    whatisnew
        8
    whatisnew  
    OP
       2015 年 4 月 18 日
    @lk09364 对,这个在 requirejs 里边也可以 export,但是不是用于干这个的。。。
    whatisnew
        9
    whatisnew  
    OP
       2015 年 4 月 18 日
    @wxt2005 就是只有在 app.js 这个文件里才用 window,其他都是 require 出来的 mvc 文件,但是在 model 和 controller 这层要用到 db 这些变量,因为不可能每 new 一次都 open 一下 db 啊
    haozhang
        10
    haozhang  
       2015 年 4 月 18 日
    去看看YUI...了解下明明空间。
    haozhang
        11
    haozhang  
       2015 年 4 月 18 日
    命名空间 ...
    jarlyyn
        12
    jarlyyn  
       2015 年 4 月 18 日
    @whatisnew

    因为myapp本来就是个框架。

    如果你用其他框架,比如jQuery,那么就应该放在jquery里。
    NemoAlex
        13
    NemoAlex  
       2015 年 4 月 19 日
    你 @ 了我,所以我进来看了一下
    但是看完,我都不知道说什么好了
    所以就这样吧
    ghbjy1128
        14
    ghbjy1128  
       2015 年 4 月 25 日
    楼主的问题其实就是Js设计模式的问题,现在有很多流派,自己随便选个自己喜欢的就可以。
    个人偏好还是定义一个命名空间,如果有什么需要外部调用的,return 就可以,大概这样子。

    window.FUN = (window.FUN || {});

    // Main Functions
    FUN = (function ($) {
    'use strict';

    function todo() { ... }

    return {
    todo: doing
    }
    });


    ... FUN.doing();
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2589 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 01:22 PVG 09:22 LAX 17:22 JFK 20:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86