Javascript 使用函数';s上下文与向函数传递参数

Javascript 使用函数';s上下文与向函数传递参数,javascript,Javascript,我想知道通过传递上下文在函数中使用这个关键字如何比向函数传递参数更好 例如: var dog = { name: 'puppy' }; function foo(obj) { console.log(obj.name); } foo(dog); // puppy 我意识到我在代码中一直遵循上述模式。虽然我还没有达到它的局限性显而易见的阶段。我想知道如何使用这个更优雅。也就是说,改用以下模式: function foo(){ console.log(this.name

我想知道通过传递上下文在函数中使用
这个
关键字如何比向函数传递参数更好

例如:

var dog = {
    name: 'puppy'
};

function foo(obj) {
    console.log(obj.name);
}

foo(dog); // puppy
我意识到我在代码中一直遵循上述模式。虽然我还没有达到它的局限性显而易见的阶段。我想知道如何使用
这个
更优雅。也就是说,改用以下模式:

function foo(){
    console.log(this.name);
}

foo.call(dog); //puppy

这实际上取决于函数将提供什么服务以及您试图完成什么

但是坦率地说,在您的简单示例中使用上下文的最佳用例是将函数添加到
dog
对象中,这样您就避免了每次都必须设置上下文

var-dog={
名字:“小狗”,
printName:function(){
console.log(this.name);
}
};
dog.printName()
我想知道通过传递上下文在函数中使用这个关键字如何比向函数传递参数更好

这是一个非常广泛的问题

简短而广泛的答案是,使用
this.property
可以构造一个使用函数调用站点对象值的函数

为什么这么聪明?因为您可以让它一次又一次地执行相同的工作,而不必手动传入反映您使用该函数的不同上下文的参数



您可以使用
.call
.apply
.bind
来手动设置
的上下文。当您无法依赖函数的调用站点时,这一点非常有用,它本质上允许您通过设置上下文来传递“无限”数量的参数。

我意识到我在代码中过多地遵循了上述模式。这是一种基本模式——将参数传递给函数——从历史开始就在JS中使用。我知道,但有人声称遵循后一种实践可以促进更干净的API,因此问题就来了。
foo.call(dog)
foo(dog)
需要您平等地传递
dog
。同意,因此也更类似于传递参数。理解
这个
不应该从理解
开始。调用
。应用
和。
绑定
基本上允许您通过设置上下文来传递“无限”数量的参数。。。参数已经允许您在不需要额外步骤的情况下执行此操作。这就是争论的本质。