我现在已经看到了两种确定参数是否已传递给JavaScript函数的方法.我想知道一种方法是否优于另一种方法,或者一种方法是否使用不好?
function Test(argument1, argument2) {
if (Test.arguments.length == 1) argument2 = 'blah';
alert(argument2);
}
Test('test');
Run Code Online (Sandbox Code Playgroud)
要么
function Test(argument1, argument2) {
argument2 = argument2 || 'blah';
alert(argument2);
}
Test('test');
Run Code Online (Sandbox Code Playgroud)
据我所知,它们都产生了相同的结果,但我在生产之前只使用过第一个.
汤姆提到的另一个选择:
function Test(argument1, argument2) {
if(argument2 === null) {
argument2 = 'blah';
}
alert(argument2);
}
Run Code Online (Sandbox Code Playgroud)
根据胡安的评论,将汤姆的建议改为:
function Test(argument1, argument2) {
if(argument2 === undefined) {
argument2 = 'blah';
}
alert(argument2);
}
Run Code Online (Sandbox Code Playgroud) 我可以覆盖Function对象的行为,以便我可以在每个函数调用之前注入行为,然后继续正常吗?具体来说,(虽然一般的想法本身很有趣)我可以在每个函数调用时登录到控制台而无需在任何地方插入console.log语句吗?那么正常的行为还在继续吗?
我确实认识到这可能会产生严重的性能问题; 即使在我的开发环境中,我也无意进行此操作.但如果它工作,似乎是一个优雅的解决方案,以获得运行代码1000米的视图.我怀疑答案将向我展示更深入的javascript.
我想用一些日志代码包装每个函数调用.会产生输出的东西,如:
func1(param1, param2)
func2(param1)
func3()
func4(param1, param2)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想要一个形式的API:
function globalBefore(func);
function globalAfter(func);
Run Code Online (Sandbox Code Playgroud)
我已经搜索了相当多的内容,但似乎只有面向方面的解决方案需要你包装你想要记录的特定功能,或者其他什么.我想要一些适用于全局范围内的每个函数的东西(显然除了它本身).
我正在尝试一段时间来切换对象的构造函数而我失败了.继续代码将显示我需要的示例.谢谢.
<script type="text/javascript">
function Me(){
this.name = "Dejan";
}
function You(){
this.name = "Ivan";
}
Me.prototype.constructor = You;
somebody = new Me();
alert(somebody.name); // **It gives Dejan, and I am expecting Ivan**
</script>
Run Code Online (Sandbox Code Playgroud)