- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个全局对象 SomeObj
(使用揭示模块模式),在 //url/to/js/file.js
中定义SomeObj
包含两个 setter 方法:SomeObj.setX()
和 SomeObj.setY()
,它们在内部设置一些私有(private)变量(X 和 Y) SomebObj
。除非通过我通过揭示模块模式公开的这些 set 方法,否则无法访问私有(private)变量 X 和 Y。
我有另一个名为 SomeObj.render()
的方法,它使用 X 和 Y 变量。
所以,这就是场景。另一位开发人员将在第三方回调函数中调用 SomeObj.render()
。
function thirdPartyCallbackFunction() {
$.getScript("//url/to/js/file.js", function() {
SomeObj.render();
});
}
此代码位于专有 CMS 中。但是,在用例中,我们的用户应该能够调用 SomeObj.setX()
和 SomeObj.setY()
来设置变量SomeObj.render()
需要。但是,由于 CMS 的设计方式,用户无权修改函数thirdPartyCallbackFunction()
所在的内容区域。
事实上,可以调用SomeObj.setX()
和SomeObj.setY()
的内容区域可能位于functionthirdPartyCallbackFunction(之前或之后) )
。如果内容区域位于functionthirdPartyCallbackFunction()
之前,则SomeObj
尚未定义,并且会发生错误。
有没有办法在定义 SomeObj
之前调用 .setX()
和 .setY()
?或者我应该采用另一种方法?
最佳答案
假设您完全无法控制 CMS 输出,也许以下内容可能会有所帮助。
在窗口对象中设置“X”和“Y”变量。
window.MyArguments = {};
window.MyArguments.X = 'whatever_is_x';
window.MyArguments.Y = 'whatever_is_y';
执行回调后,如果“MyArguments”存在,您可以更新值并调用渲染。
function render() {
if(window.MyArguments && window.MyArguments.X && window.MyArguments.Y) {
SomeObj.setX(window.MyArguments.X);
SomeObj.setY(window.MyArguments.Y);
SomeObj.render();
} else {
//Set a time-out and call the same function again.
}
}
您可以在回调中调用这个新的“渲染”函数。
function thirdPartyCallbackFunction() {
$.getScript("//url/to/js/file.js", function() {
render();
});
}
您也可以尝试相反的方法,在调用 SomeObj 上的方法之前检查 SomeObj 是否可用,如果尚不可用则设置超时。
还有一个“密封”和“解封”模式的选项,以允许对模块的定义进行部分更新。
关于javascript - 如何将用户定义的属性传递给可能尚不存在的Javascript对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531577/
我需要面对一个架构/设计决策。 我正在开发一个 Cordova/Meteor 应用程序,它具有独特的入门体验。新用户会看到一个向导,引导他们完成填写某些表单的步骤。 向导流程会等到最后一步才能注册用户
我想通过 psql 在空数据库中加载一些 SQL 函数: psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1 我使用 --set ON_
我是一名优秀的程序员,十分优秀!