合法使用在全局命名空间上创建新对象

时间:2011-11-03 10:13:33

标签: javascript jquery

这是否合法地在全局命名空间中创建对象?我的目标是为此应用程序创建1个全局命名空间。另外我怎么别名MYNYTE.app?我可以做这样的事情而不污染全局命名空间: var b = MYNYTE.app;

if( ! MYNYTE ) MYNYTE = {};
if( ! MYNYTE.app ) MYNYTE.app = {};


MYNYTE.app.Playbook = function(){

    this.change = '';
    this.boo = function(){alert('boo');}


    this.setChange = function( v )
    {
        this.change = v;    
    }

    this.getChange = function( v )
    {
        return this.change;
    }
}

var test    = new MYNYTE.app.Playbook();
var test2   = new MYNYTE.app.Playbook();

test.boo();
test.setChange( 'Change is bad' );
test2.boo();
test2.setChange( 'Change is great' );
console.log( test2.getChange() );
console.log( test.getChange() );

1 个答案:

答案 0 :(得分:0)

这是我经常使用的结构。有意思看是否有更好的东西!

var MYNYTE = MYNYTE || {};
MYNYTE.app = MYNYTE.app || {};

(function() {
    var Playbook = function Playbook() {
      ...
    };

    MYNYTE.app.Playbook = Playbook;
})();

// Avoid polluting the global scope
(function() {
    var b = MYNYTE.app.Playbook;
    var OtherClass = function OtherClass() {
      ...
      b.setChange( 'something' );
    };

    MYNYTE.app.OtherClass = OtherClass;
})();