值null是表示null或"空"值的JavaScript文字,即不存在对象值.它是JavaScript的原始值之一.
function getMax(arr){
return Math.max.apply(null, arr);
}
Run Code Online (Sandbox Code Playgroud)
不明确传递关键字this更清晰,或至少更具可读性?然后,在这一点上,我可能不明白你为什么要使用null.
Chr*_*tos 12
调用apply,使用null作为第一个参数是像调用函数而无需为提供任何对象this.
该apply方法有什么作用?
该
apply()方法调用具有给定this值的函数,并arguments作为数组(或类数组对象)提供.
fun.apply(thisArg, [argsArray])
Run Code Online (Sandbox Code Playgroud)
thisArg
这个值为乐趣召唤提供了.请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,并且原始值将被加框.
可在此处找到更多文档.
jfr*_*d00 11
为什么要将'null'传递给'apply'或'call'?
如果没有值,您希望为this函数内部的指针指定值,并且您调用的函数不期望特定this值以便正常运行.
不明确传递关键字这个更清楚吗?或者至少更具人性化.然后在这一点上我可能不明白为什么你会使用null.
在您的具体情况下,最好的方法是传递Math对象:
function getMax(arr){
return Math.max.apply(Math, arr);
}
Run Code Online (Sandbox Code Playgroud)
虽然事实证明你传递的内容与第一个参数无关Math.max.apply(...)(仅因为实现细节Math.max()),但是传递Math将this指针设置为与正常调用它时设置的完全相同的东西,就像Math.max(1,2,3)这样是最安全的选择,因为你最好模拟正常的呼叫Math.max().
为什么要将'null'传递给'apply'或'call'?
这里有一些更多的细节......当使用.call()或.apply(),null可当你有,你要设置的没有特定的值传递this指针,你知道你调用的函数并不期望this有任何具体的值(例如它不要this在其实施中使用).
注意:使用nullwith .apply()或者.call()通常仅使用作为名称空间原因的方法的函数,而不是出于面向对象的原因.换言之,该函数max()是上的方法Math,只是由于命名空间的原因对象,而不是因为Math对象有实例数据,该方法.max()需要访问.
如果你这样做:
function foo() {
this.multiplier = 1;
}
foo.prototype.setMultiplier = function(val) {
this.multiplier = val;
}
foo.prototype.weightNumbers = function() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += (arguments[i] * this.multiplier);
}
return sum / arguments.length;
}
var x = new foo();
x.setMultiplier(3);
var numbers = [1, 2, 3]
console.log(x.weightNumbers.apply(x, numbers));
Run Code Online (Sandbox Code Playgroud)
当您调用的方法.apply()需要访问实例数据时,您必须将相应的对象作为第一个参数传递,以便该方法具有正确的this指针以按预期执行其工作.
| 归档时间: |
|
| 查看次数: |
8395 次 |
| 最近记录: |