#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);