Почему функции в классе и функции имеют разное выражение, когда я регистрирую их в javascript?

#javascript #function #class

#javascript #функция #класс

Вопрос:

Я создал Example function и Example2 class . Я ожидал, что результаты журнала будут одинаковыми. Но на самом деле они не совсем одинаковые.

 function Example() {}

Example.prototype.ex = function () {};
Example.iex = function () {};
console.log(Example.prototype.ex);
console.log(Example.iex);

class Example2 {
  ex() {}
  static iex() {}
}

console.log(Example2.prototype.ex);
console.log(Example2.iex); 

Результаты журнала приведенного выше кода..

 [Function]
[Function]
[Function: ex]
[Function: iex]
 

функции из class шоу [Function: name] .
Но функции из function shows только [Function] без имени функции.

Ответ №1:

Когда вы используете синтаксис метода внутри класса или литерала объекта, то есть когда функция выглядит как

 functionName() {
}
 

Интерпретатор автоматически присвоит этой функции имя свойства. Напротив, когда у вас есть выражение безымянной функции, например, с:

 someObj.someFn = function () {};
//               ^^^^ this function expression isn't named
 

Функция не получает name свойство. В конце концов, только из

 function () {}
 

нет никакого имени, которое можно было бы осмысленно присвоить ему.

(При назначении автономной переменной like const fn = функция получит имя переменной, но этого не происходит при присвоении свойства объекту.)

Функции со name свойством при регистрации будут отображать их имя. Функции без name свойства не будут отображать их имя.

 const obj = {};
obj.unnamedFn = function() {};
const obj2 = {
  namedFn() {}
};

console.log(obj.unnamedFn.name);
console.log(obj2.namedFn.name);