Javascript 加载依赖于页面的面向对象JS属性的最佳方法是什么?

Javascript 加载依赖于页面的面向对象JS属性的最佳方法是什么?,javascript,jquery,oop,Javascript,Jquery,Oop,我有一个包含所有对象的外部JS脚本文件,在文档准备好后运行,类似这样的东西 jQuery(function($) { var Main = { run: function () { myFunction.setup(); } } var myFunction = { setup: function() { //Do some stuff here }

我有一个包含所有对象的外部JS脚本文件,在文档准备好后运行,类似这样的东西

jQuery(function($) {
    var Main = {
        run: function () {
             myFunction.setup();
        }
    }

    var myFunction = {
        setup: function() {
            //Do some stuff here
        } 
    }

    Main.run();
});
我希望只有当im在某个页面上时才能运行myFunction.setup(),否则,如果该方法查找页面上不存在的元素(例如幻灯片、菜单等),我会出错

目前,我已经通过检查元素是否存在.length来解决这个问题,如果存在,则运行方法的其余部分,但我想知道是否有更好的方法?比如,当脚本文件基于im打开的页面加载时,是否可以将变量发送到脚本文件,以便它知道要运行什么方法

任何帮助都将不胜感激

谢谢


Giles

Paul Irish有一种很好的方法可以做到这一点,使用body标记中的ID和类来执行某些代码块:


Paul Irish有一种很好的方法可以做到这一点,使用body标记中的ID和类来执行某些代码块:


这类事情可能会有帮助:

特定页面

var page_config = {
    setup_allowed: true
    // ... more config
};
var Main,
    myFunction;

(function ($, _config) {
    myFunction = (function () {
        var _public = {};
        if (_config.setup_allowed === true) {
            _public.setup = function () {

            };
        }
        return _public;
    })();

    Main = (function () {
        var _public = {};
        if (typeof myFunction.setup !== "undefined") {
            _public.run = function () {
                myFunction.setup();
            };
            // Run it as we had Main.run() before
            _public.run();
        }
        return _public;
    })();

})(jQuery, page_config);
通用型

var page_config = {
    setup_allowed: true
    // ... more config
};
var Main,
    myFunction;

(function ($, _config) {
    myFunction = (function () {
        var _public = {};
        if (_config.setup_allowed === true) {
            _public.setup = function () {

            };
        }
        return _public;
    })();

    Main = (function () {
        var _public = {};
        if (typeof myFunction.setup !== "undefined") {
            _public.run = function () {
                myFunction.setup();
            };
            // Run it as we had Main.run() before
            _public.run();
        }
        return _public;
    })();

})(jQuery, page_config);
只有在
page\u config
中指定时,才能使用这种方式
Main.run()
myFunction.setup()


这是一个你可以玩的游戏。对于您的特定需求,这可能有点冗长,但希望它能在某种程度上有所帮助:-)

这种事情可能会有所帮助:

特定页面

var page_config = {
    setup_allowed: true
    // ... more config
};
var Main,
    myFunction;

(function ($, _config) {
    myFunction = (function () {
        var _public = {};
        if (_config.setup_allowed === true) {
            _public.setup = function () {

            };
        }
        return _public;
    })();

    Main = (function () {
        var _public = {};
        if (typeof myFunction.setup !== "undefined") {
            _public.run = function () {
                myFunction.setup();
            };
            // Run it as we had Main.run() before
            _public.run();
        }
        return _public;
    })();

})(jQuery, page_config);
通用型

var page_config = {
    setup_allowed: true
    // ... more config
};
var Main,
    myFunction;

(function ($, _config) {
    myFunction = (function () {
        var _public = {};
        if (_config.setup_allowed === true) {
            _public.setup = function () {

            };
        }
        return _public;
    })();

    Main = (function () {
        var _public = {};
        if (typeof myFunction.setup !== "undefined") {
            _public.run = function () {
                myFunction.setup();
            };
            // Run it as we had Main.run() before
            _public.run();
        }
        return _public;
    })();

})(jQuery, page_config);
只有在
page\u config
中指定时,才能使用这种方式
Main.run()
myFunction.setup()


这是一个你可以玩的游戏。对于您的特定需求,这可能有点冗长,但希望它能在某种程度上有所帮助:-)

谢谢您的示例,Jake,比我现在能理解的稍微复杂一点,page_config是实际页面上设置的全局变量吗?对不起,它在我的脑海中看起来不错,但在我写下来的时候变得有点复杂了:-)是的,
page\u config
只是每个页面中的一个全局变量;其余部分将只包含在每个页面上导入的一个JS文件中。只有在
page\u config
中指定的情况下,代码才会有条件地使用包含
函数
s。谢谢Jake,是的,理论上听起来不错,虽然我不喜欢在页面上使用javascript,但奇怪的是我知道哈!无论如何,我使用了另一种方法,通过php将数据属性放在body标记输出上,这种方法工作得很好。不过,我可能会在我的下一个项目中尝试一下这种方法,再次感谢你的时间。谢谢你的例子Jake,比我现在能理解的稍微复杂一点,我想page_config是在实际页面上设置的全局变量吗?对不起,它在我的脑海中看起来不错,但在我写下来的时候变得有点复杂了:-)是的,
page\u config
只是每个页面中的一个全局变量;其余部分将只包含在每个页面上导入的一个JS文件中。只有在
page\u config
中指定的情况下,代码才会有条件地使用包含
函数
s。谢谢Jake,是的,理论上听起来不错,虽然我不喜欢在页面上使用javascript,但奇怪的是我知道哈!无论如何,我使用了另一种方法,通过php将数据属性放在body标记输出上,这种方法工作得很好。不过,我可能会在我的下一个项目中尝试一下这种方法,再次感谢您的时间。感谢Mathletics,我在另一个网站上做的正是这种方法,但不确定它是否正确,因为看到Irish先生做的同样的事情是值得的,而vidget文章似乎真的是一种很好的方法!多亏了Mathletics,我在另一个网站上也这么做了,但我不确定这是否正确,因为看到Irish先生也在做同样的事情是值得的,而vidget的文章似乎真的是一种很好的方式!