在javascript严格模式下全局初始化oop函数

时间:2013-11-27 15:01:58

标签: javascript jquery oop strict

我在这样的javascript中有一个oop函数:

'use strict';
function oopFunc(){
    this.oopMethod(){
        console.log('hey it works');
    }
}

function foo(){
    var init = new oopFunc();
    init.oopMethod();
}

function bar(){
    var again = new oopFunc();
    again.oopMethod();
}

我怎样才能将oopFunc对象初始化一次(就像一个全局变量)并使用这样的方法?:

'use strict';

function oopFunc(){
    this.oopMethod(){
        console.log('hey it works');
    }
}

function initOopfunction(){
    init = new oopFunc();
}

function foo(){
    init.oopMethod();
}

function bar(){
    init.oopMethod();
}

我必须将变量参数传递给方法,但我不想每次想要使用它时初始化它的新对象

修改

我需要在其他函数中初始化函数,因为oop函数获取一些必须由用户输入的参数

1 个答案:

答案 0 :(得分:2)

如果你想从一个函数初始化公共对象(虽然我没有说明你为什么要这样做),你可以在普通范围内声明var,并从其他地方初始化它。

'use strict';

var myObj;

function ObjConstructor() {
    this.hey = function () {alert ('hey');};
}

function init() {
     myObj = new ObjConstructor();   
}

function another() {
     init();  // Common object initialized
     myObj.hey();
}

another();

在此处查看:http://jsfiddle.net/8eP6J/

'use strict';的要点是,当您不使用var声明变量时,它会阻止创建隐式全局变量。如果明确声明变量,那么你就可以了。

花点时间阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

此外,我建议您将代码包装在自动执行的函数中,以免污染全局范围并避免与可能在站点中运行的其他脚本发生冲突。理想情况下,整个应用程序应该只存在于一个全局变量中。有时你甚至可以避免这种情况。如下所示:

(function () {
    'use strict';

    // the rest of your code
})();