применить — почему я должен использовать метод вызова javascript?

Почему я должен использовать метод вызова javascript?

 function Product(name) { this.name = name; } function Pizza(name) { Product.call(this,name); } const pizza = new Pizza("Margherita"); 

Это наследство . Пицца это продукт. В других языках, например PHP, наследование выглядит так:

 class Foo { public function __construct() { // Do stuff specific for Foo } } class Bar extends Foo { public function __construct()( parent::__construct(); // Do stuff specific for Bar } } 

Здесь у нас нет extends и чтобы заставить его работать, нужно сказать, что this в родительском конструкторе является дочерним.

Используя call , вы можете сказать, что this в функции / конструкторе Product() . В данном случае это объект Pizza (новый созданный объект {}). Без call Pizza не было бы даже имени.

То же самое касается вашего первого примера

 var person = { fullName: function() { return this.firstName   " "   this.lastName; } } var person1 = { firstName:"John", lastName: "Doe" } var person2 = { firstName:"Mary", lastName: "Doe" } var x = person.fullName.call(person1); 

Да, это работало без call но не без радикальных изменений.

person.fullName.call(person1); все равно что сказать, возьми эту функцию и переставь this с моим объектом person1. Итак, в конце концов, это как если бы вы сделали это:

 return person1.firstName   " "   person1.lastName; 

Что использовать

Примечание. Хотя синтаксис этой функции практически идентичен синтаксису call (), принципиальное отличие состоит в том, что call () принимает список аргументов , а apply () принимает один массив аргументов .

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector