IE中的Javascript命名空间抛出错误

Javascript namespacing throwing error in IE

本文关键字:出错 错误 命名空间 中的 Javascript IE      更新时间:2023-09-26

在我的项目中,我为每个网页创建模块并添加到名为View的基本对象:

应用.js

var View = (function()  {
    var View  = function()  {
        this.attributes = {
            baseUrl : '',
            urls : {}
        };
    };
    View.prototype.setUrl = function(url)   {
        this.attributes.baseUrl = url;
    };
    View.prototype.getUrl = function()  {
        return this.attributes.baseUrl;
    };
    return new View();
})();

搜索视图.js

var View = View || {};
var SearchView = View.SearchView = (function()  {
    var Private = {
        search : function(url)  {},
        loadSearchResult : function()   {},
        clearSearchForm : function()    {}
    };
    Private.search = function(url)  {
        ajax(url,...);
        this.loadSearchResult();
    };
    var SearchView = function() {
        this.settings = {};
    };
    SearchView.prototype.loadEventBindind = function()  {
        $(document)
        .on('click','#search-button', function()    {
            Private.search(View.baseUrl);
        })
        .on('click','#reset-search', function() {
            Private.clearSearchForm();
        });
    };
    return new SearchView();
})();

搜索.html

<script type="text/javascript" src="media/scripts/Modules/App.js"></script>
<script type="text/javascript" src="media/scripts/View/SearchView.js"></script>
<script type="text/javascript">
    View.setUrl('http://www.set.com/');
    View.SearchView.loadEventBindings();
</script>

这段代码在Chrome和Firefox中工作正常,但在IE中抛出错误:

'

View.SearchView ' 是否null

对象

IE不支持这种创建对象的方式吗?

您应该做几件事:

您的

弱点是,您的应用程序.js脚本可能会覆盖 SearchView.js 创建的View对象。

  • 不要将一个变量同时用作命名空间和类。这是违反直觉的。
  • 如果您已经在编写单例,则无需使用原型模式,尽管它没有任何问题。不过,您不会节省任何内存。

如果您坚持使用 View 作为类和命名空间,请进行此类更改以防止View被覆盖。

var View = View || {};
var ViewTmp;
$.extend(ViewTmp = (function()  {
    var View  = function()  {
    ...
  ...
})(), View);
View = ViewTmp;

此脚本假定您使用的是 jQuery(由于$.extend方法)。

相关文章: