gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:55:55 25 4
gpt4 key购买 nike

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

App.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();

})();

SearchView.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();

})();

search.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' is null or not an object

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

最佳答案

有几件事你应该做:

您的 App.js 脚本可能会覆盖由 SearchView.js 创建的 View 对象。

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

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

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

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

此脚本假定您正在使用 jQuery(因为 $.extend 方法)。

关于IE 中的 Javascript 命名空间抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11933604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com