在对象上调用的函数和通过对象调用的函数之间有什么区别?

时间:2017-10-04 09:23:24

标签: javascript

读一本关于javascript的书(我不知道规则是否允许我写标题和作者......)我注意到一些我想要更好理解的函数:

  

如果将函数分配给对象的属性,则将其称为方法   宾语。在对象上或通过对象调用函数时,该对象是调用   上下文或函数的这个值。

我想了解调用 on 对象的函数与调用通过对象的函数之间的区别。

1 个答案:

答案 0 :(得分:0)

这可能不完全正确,但这是我对差异的理解。

在调用对象方法的情况下,在方法本身中,this自动引用调用该方法的对象。

然而,当在对象上调用函数时,您可以将this的上下文绑定到您想要的任何对象。该对象不需要以任何方式与函数相关,并且可以为多个不同的对象一个接一个地使用相同的函数。

编辑根据Bergi的反馈在和通过引用切换

例如:

function Animal(name, sound) {
  this.name = name;
  this.sound = sound;
}

Animal.prototype.speak = function () {
  console.log(this.name + ' says "' + this.sound + '"'); 
};

function speak() {
  console.log(this.name + ' says "' + this.sound + '"'); 
}

var cat = new Animal('Garfield', 'meow');
var dog = new Animal('Odie', 'woof');

// Invoke function through object
cat.speak();
dog.speak();

// Invoke function on object
speak.call(cat);
speak.call(dog);