在Redux中,我可以轻松订阅商店更改
store.subscribe(() => my handler goes here)
Run Code Online (Sandbox Code Playgroud)
但是,如果我的商店充满了不同的对象,并且在我的应用程序中的某个特定位置,我想订阅仅在商店中的特定对象中进行的更改?
我想要做的就是传递给函数的变量的名称和该变量的值,并且只在一个变量传递给函数.所以:
var x = "anything";
function showName() {
}
showName(x);
Run Code Online (Sandbox Code Playgroud)
要么
showName("x");
Run Code Online (Sandbox Code Playgroud)
将返回:"x =任何东西".
现在,我必须指定变量两次:
showName("x", x);
Run Code Online (Sandbox Code Playgroud)
为了获取我传入的变量的名称和值.
请注意,我对showName原型中的参数名称不感兴趣,但是对调用函数中的变量名称不感兴趣.另外,传递的变量可能是本地的,所以我不能使用window对象来查找变量.
大多数网站都说"callee"作为Function.arguments的属性已被弃用.但有些网站更进一步,并说整个Functions.argument已被弃用,例如http://aptana.com/reference/api/Arguments.html为什么只提到被叫者,如果整个程序在水中已经死了?我只是发现了"论点",看起来非常有用,例如:http://hungred.com/how-to/secret-arguments-array-javascript/
是否有可能将Javascript函数的所有参数都写入接受?(我知道所有Javascript函数参数都是"可选的")?如果没有,是否可以获得参数的数量?例如,在PHP中,可以使用:
$class = new ReflectionClass('classNameHere');
$methods = $class->getMethods();
foreach ($methods as $method) {
print_r($method->getParameters());
}
Run Code Online (Sandbox Code Playgroud)
...或类似的东西,我有一段时间没有碰过PHP,所以上面的例子可能不正确.
提前致谢!
编辑:不幸的是,我必须能够在函数体外获取参数...对不起澄清,但感谢您当前的答案!
我希望inspect.getargspec()在Javascript中使用相当于Python的东西.
我知道你可以arguments从Javascript函数中获取列表,但我真正想要的是来自最初定义的函数的参数的名称.
如果这实际上是不可能的,我将不得不通过获取函数的字符串来"强制"它,即myFunc.toString()然后解析出...内部的函数function myFunc(...).有谁知道如何以一般方式进行解析?
谢谢你的任何提示.
有没有办法在JavaScript中检索函数的默认参数值?
function foo(x = 5) {
// things I do not control
}
Run Code Online (Sandbox Code Playgroud)
有没有办法获得x这里的默认值?最理想的是,像:
getDefaultValues(foo); // {"x": 5}
Run Code Online (Sandbox Code Playgroud)
请注意,toString该函数不起作用,因为它会在非常量的默认值上中断.
如何以编程方式识别ES5中的getter和setter属性?
var o, descriptor, descriptorGetter, descriptorSetter;
o = {
foo: 'foo',
get bar() {
return 'bar';
},
set bam(value) {
this._bam = value;
},
};
descriptor = Object.getOwnPropertyDescriptor(o, 'foo');
descriptorGetter = Object.getOwnPropertyDescriptor(o, 'bar');
descriptorSetter = Object.getOwnPropertyDescriptor(o, 'bam');
console.log(JSON.stringify(descriptor));
console.log(JSON.stringify(descriptorGetter));
console.log(JSON.stringify(descriptorSetter));
Run Code Online (Sandbox Code Playgroud)
打印:
{"value":"foo","writable":true,"enumerable":true,"configurable":true}
{"enumerable":true,"configurable":true}
{"enumerable":true,"configurable":true}
Run Code Online (Sandbox Code Playgroud) 我有一个HtmlHelper扩展方法,它将javascript回调函数作为参数..例如:
@Html.SomethingCool("containerName", "jsCallbackFunction")
<script type="javascript">
function jsCallbackFunction(e, i) {
alert(e.target.name + ' / ' + i);
}
</script>
Run Code Online (Sandbox Code Playgroud)
如您所见,javascript回调函数名称将传递给HtmlHelper扩展方法.这导致开发人员必须返回文档以确定jsCallbackFunction函数需要哪些参数.
我更喜欢这样的东西:
@Html.SomethingCool("containerName", New SomethingCoolCallbackDelegate(Address Of jsCallbackFunction))
<OutputAsJavascript>
Private Sub jsCallbackFunction(e, i)
' SOMETHING goes here. some kind of html dom calls or ???
End Sub
Run Code Online (Sandbox Code Playgroud)
这SomethingCoolCallbackDelegate将提供目标函数的代码契约.然后编译器会在MVC页面上将jsCallbackFunction编译为javascript.
.NET 4/ASP.NET MVC 4/Razor 2中是否有这样的内容?或任何其他可以实现类似的技术?
示例在VB中,但C#中的解决方案也是可以接受的.
@gideon:注意jsCallbackFunction两个参数e,和i.但是,HtmlHelper扩展方法只是要求一个字符串(javascript回调函数的名称),并不指示此函数可能采用的参数.我试图解决的问题是双重的.
首先,缺少参数提示.传递代替"javascript回调名称"字符串的.NET委托类型将实现此目的.我愿意接受其他解决方案来实现这一目标.我知道XML注释.它们并不是真正的解决方案.
其次,尝试让页面编程人员使用单一语言.在javascript和VB(或js和C#)之间切换需要(对我来说至少)昂贵的上下文切换.我的大脑没有快速过渡.让我在VB或C#中工作更具生产力和成本效益.因此,能够在.NET语言中编写函数并将其编译为javascript,在ASP.NET MVC/razor视图的上下文中,就是我在这里所追求的.
@TyreeJackson:我会编写一个输出html和javascript SomethingCool的HtmlHelper扩展方法.部分javascript输出需要调用用户(程序员) - 提供的函数来做出一些决定.可以认为它类似于您为ajax调用提供的成功或失败功能.
我正在研究javascript(node.js)中的一个项目,我试图从函数中获取一个参数名称数组(NOT值,我不需要参数).我目前正在使用Function.toString()获取函数字符串,然后运行正则表达式以获取我的参数列表.
我们来看下面的简单示例:
var myFunction = function (paramOne, paramTwo) { ... }
Run Code Online (Sandbox Code Playgroud)
运行我的正则表达式,然后做一些字符串魔术(拆分等),我希望像这样的数组:
paramList = ['paramOne', 'paramTwo']
Run Code Online (Sandbox Code Playgroud)
我有一些有用的东西,但我觉得它可能不是最好的解决方案给定一些时髦的字符javascript允许你使用变量名称和javascript将让你在多行定义功能.
这是我目前拥有的:
function.*[\w\s$]*(\((.*[\w\s,$]*)\))
Run Code Online (Sandbox Code Playgroud)
这给了我第1组中的"匹配",然后是第2组中没有任何parens的参数列表,这很酷.这真的是做我想要的最好的方式吗?我可以使用更好的正则表达式吗?我并不是在寻找"更简单"的东西,而是真正能够捕捉到所有可能情况的东西.
任何帮助将不胜感激,并提前多多感谢!
我很好奇该emitDecoratorMetadata选项在将 TypeScript 转换为 JavaScript(在 Angular 2 上下文中)的重要性。如果设置为false,并且元数据将不会包含在生成的代码中,它会产生什么影响?
javascript ×8
arguments ×3
angular ×1
c# ×1
decorator ×1
ecmascript-6 ×1
inspection ×1
methods ×1
optional ×1
razor-2 ×1
react-native ×1
redux ×1
reflection ×1
regex ×1
typescript ×1
vb.net ×1