JS функция сравнения с объектами - PullRequest
0 голосов
/ 11 сентября 2018

Почему в этом коде JavaScript две функции при сравнении напрямую возвращают True, а при сравнении с использованием создания нового объекта - False?

function A() {
    return this;
}

function B() {
    return this;
}

console.log(A() === B());
console.log(new A() == new B());

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы должны знать, что в JavaScript this относится к контексту вызова или месту, где был сделан вызов функции.

Когда вы делаете

function A() {
    return this;
}

, тогда

console.log( A() );

Вызывающий контекст, по очевидным причинам, является контекстом window и, следовательно, this относится кwindow.То же самое и в случае B().

Однако, когда вы делаете new A(), вы инициализируете новый экземпляр класса и, напротив, новую ячейку памяти.Поскольку каждая новая инициализация ссылается на новую ячейку памяти, они никогда не равняются true.

0 голосов
/ 11 сентября 2018

В первом случае this внутри функции относится к объекту window. Так что это в основном window === window, что верно

function A() {
 return this;  // this is the window object
}

function B() {
  return this; // this is window object
}

В этом случае new A() and new B() относится к разным ячейкам памяти, поэтому они никогда не равны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...