繁体   English   中英

fn.apply(fn,[])做了什么?

[英]what does fn.apply(fn, []) do?

我有一段代码接受fn作为参数并将其存储在object属性中。

var obj = {};

function anotherFn(fn){
   obj["name"] = fn.apply(fn, []);
}

function google(){
    console.log("hello");
}
anotherFn(google);
console.log(obj.name);

我不理解的是fn.apply(fn,[])代码及其目的。 通常我们在想要在不同的this/context执行fn时使用callapply方法。

但是fn.apply(fn, [])在这里做了什么? 困惑是为什么我不能这样做

obj["name"] = fn();

fn.apply(fn, [])调用存储在功能fn与上下文的值( this的同时执行该功能) fn ,和其中所包含的参数[]无参数)。

以这种方式调用apply似乎很奇怪,因为它等同于调用fn.call(fn)

fn() 不是一个合适的替代品,因为fn()将在全局上下文中执行,这意味着函数中的this值将是window (假设是浏览器环境)。

这是一个有用的样本,展示了它是如何不同的:

var obj = {};

function anotherFn(fn){
   obj["name"] = fn.apply(fn, []);
}

function anotherFn2(fn){
   obj["name"] = fn(fn, [])
}

function google() {
    console.log(this.world);
}
google.world = "yay!"

anotherFn(google);
anotherFn2(google);

输出是:

yay!
undefined

jsFiddle: http//jsfiddle.net/c56ja3jL/

根据上下文,这可能很有用。 基本思想是你总是将this与函数本身相等,而不是全局上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM