是否可以扩展Javascript函数参数'属性转换为本地范围
Is it possible to extend Javascript function arguments' properties into local scope?
是否可以将函数参数的属性扩展到函数的本地范围?取以下代码:
function foo(a, b) {
// apply some magic here to extend arguments' properties into local scope
assert(bar == 'hello')
assert(baz == 'world')
assert(qux == 1234)
}
foo({bar: 'hello', baz: 'world'}, {qux: 1234})
假设我不能控制foo
的调用方式,而只能控制它的实现,那么在foo
中我能做些什么,使其不必将bar
前缀为a.bar
吗?
我意识到,在这样一个做作的例子中,这可能看起来很疯狂,所以让我解释一下我的总体目标。我希望以这样一种方式使用requirejs,即不必在导入的模块的成员前面加上模块名称。例如:
requirejs(['mod'], function(mod) {
assert(mod.blah()) // OK, normal
assert(blah()) // needs magic to work
})
我尝试实现这一点的原因是,在我看来,我有几个文件在逻辑上属于一个模块,但出于开发方便的原因,它们不能很好地混合在同一个源文件中,例如生产代码和测试代码。
我尝试实现这一点的原因是,在我看来,我有几个文件在逻辑上属于一个单一的模块
啊,我们有一个XY问题:-)由于js中没有像这样的魔术(除了让所有模块属性都成为全局变量之外——当然不是你想要的),你需要另一个解决方案。
使用extend
方法将a
和b
混合到单个模块中是简单的。使用jQuery,它可能看起来像
var c = $.extend({}, a, b);
但是你也可以用一个简单的for in循环来实现。您甚至可能将其声明为自己的requirejs模块,这取决于a和b并返回c;所以你只需要请求c.
出于开发方便的原因,在同一个源文件中不能很好地混合
使用构建工具将多个开发文件合并为一个(巨大的)生产文件可能还有其他可能性。不确定这是否适用于您的情况。
这已经有一段时间了,但我发现了一种方法。可以使用JavaScriptwith
关键字将对象扩展到本地范围。然而,根据MDN的说法,不鼓励使用with
(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/with)。但是,如果真的想扩展本地范围,下面是它的样子。
function foo(a, b) {
with (a) {
with(b) {
assert(bar == 'hello')
assert(baz == 'world')
assert(qux == 1234)
}
}
}
foo({bar: 'hello', baz: 'world'}, {qux: 1234})
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- 手柄'img'单击事件并插入'alt'使用jQuery将属性转换为文本框
- Javascript将数组中对象的属性转换为字符串
- 如何在不使用css转换的情况下将jQuery animate与css3属性相结合
- 如何将CSS背景位置属性从百分比转换为像素
- 如何将返回一串数字的 JSON 属性转换为日期
- 使用多个 css 类将 css 转换属性应用于 DOM 对象时遇到问题
- 使用 JavaScript 更新转换属性中的 rotate() 属性
- 如何使用更多次 css 转换属性
- Babel React 转换:属性值预期的字符串类型,但得到空
- jQuery 如何将 CSS 转换属性设置为任何对象
- 使用 jQuery 2.1+ 更改 css 会忽略转换属性
- 使用javascript解析SVG转换属性
- mozilla css转换属性dosn'不起作用
- CSS中转换属性的动态值
- 意外值翻译解析转换属性
- Css3过渡+转换属性在早期版本的IE中不工作
- -translate的webkit转换属性
- 用于CSS3动画和转换属性的Javascript代码
- XML3D css转换vs自定义转换属性