Javascript 如何创建或扩展全局对象
我试图从一个外部JS文件扩展一个对象,该文件加载到一个可能存在相同对象名的页面中 我已在全局范围内拥有一个对象:Javascript 如何创建或扩展全局对象,javascript,object,Javascript,Object,我试图从一个外部JS文件扩展一个对象,该文件加载到一个可能存在相同对象名的页面中 我已在全局范围内拥有一个对象: window.Qo = {} window.Qo.myvar = 1 我需要包括一个JS文件,如果它确实存在,将扩展它,如果不存在,则创建它 (function(Qo) { Qo.prototype.var2 = 2 function secretFn(value) { return value } Qo.prototype.pu
window.Qo = {}
window.Qo.myvar = 1
我需要包括一个JS文件,如果它确实存在,将扩展它,如果不存在,则创建它
(function(Qo) {
Qo.prototype.var2 = 2
function secretFn(value) {
return value
}
Qo.prototype.public = function(value) {
console.log(value)
return value
}
return Qo
})(window.Qo = window.Qo || {})
据我所知,最后一行是,如果函数存在,则传递给函数的对象是window.Qo
,如果不存在,则为空对象
但是,尝试扩展原始对象时,即使我将函数传递给myvar
,也会出现错误,即该值不是函数
TypeError:(中间值)(…)不是函数
我错过了什么
另外,在未知/不受信任的第三方网站上包含全局对象时,是否还有其他需要检查的内容
编辑
我根据下面的答案编写了一个代码:
;(function(Qo) {
// Private variable
var _bar;
// Private function
function _atob(value) {
if(!typeof value === 'undefined')
return atob(value)
}
// Public functions
Qo.prototype.getBar = function() {
return _bar;
};
Qo.prototype.setBar = function(bar) {
_bar = bar;
};
return Qo;
})(window.Qo = window.Qo || {})
Qo.setBar('test')
错误:TypeError:Qo.prototype未定义;无法访问其“getBar”属性
请尝试下面的代码
(function(Qo = window.Qo || {}) {
Qo.prototype.var2 = 2
function secretFn(value) {
return value
}
Qo.prototype.public = function(value) {
console.log(value)
return value
}
return Qo
})()
看看这个默认参数 试试下面的代码
(function(Qo = window.Qo || {}) {
Qo.prototype.var2 = 2
function secretFn(value) {
return value
}
Qo.prototype.public = function(value) {
console.log(value)
return value
}
return Qo
})()
看看这个默认参数 您可能需要在发布的代码前面加一个分号。 自 js将把
任何前面的表达式
视为一个函数对象,您希望使用下面的(…)
所以你喜欢做某事
whateverPrecedingExpression
;(function(Qo) {
Qo.prototype.var2 = 2
function secretFn(value) {
return value
}
Qo.prototype.public = function(value) {
console.log(value)
return value
}
return Qo
})(window.Qo = window.Qo || {})
可能您需要在发布的代码前面加一个分号。 自 js将把
任何前面的表达式
视为一个函数对象,您希望使用下面的(…)
所以你喜欢做某事
whateverPrecedingExpression
;(function(Qo) {
Qo.prototype.var2 = 2
function secretFn(value) {
return value
}
Qo.prototype.public = function(value) {
console.log(value)
return value
}
return Qo
})(window.Qo = window.Qo || {})
谢谢你的建议,检查更新的问题。我仍然有一个错误:
TypeError:Qo.prototype未定义;无法访问其“getBar”属性
:/谢谢您的建议,请检查更新的问题。我仍然有一个错误:TypeError:Qo.prototype未定义;无法访问其“getBar”属性
:/我也尝试过此方法(在更新问题之前),它也不起作用<代码>类型错误:Qo.prototype未定义;无法访问其“var2”属性我也尝试过这个方法(在更新问题之前),它也不起作用<代码>类型错误:Qo.prototype未定义;无法访问其“var2”属性