Привязать новый класс () и функцию к той же переменной в JavaScript? - PullRequest
0 голосов
/ 05 октября 2019

Создав новый экземпляр someClass () и связав функцию с той же переменной, будет ли создаваться новый someClass каждый раз, когда я вызываю someFunc ()?

const someFunc = new someClass().getOrSetOrWhatever()

по сравнению с тем, если я его напишукак обычно это делается

let s = new someClass()
s.getOrSetOrWhatever()

И если я помещу первый пример в конструктор, будет ли это означать, что будет только один экземпляр (каждый раз, когда я вызывал this.someFunc)? Это будет плохая практика? Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 06 октября 2019

Каждый раз, когда вы вызываете new someClass(), создается новый экземпляр someClass. Ключевое слово «new» заставляет уникальную «копию» класса генерировать новую, уникальную копию (экземпляр).

Когда вы выполняете getOrSetOrWhatever(), прикованный к new someClass() как:

let s = new someClass().getOrSetOrWhatever()

Тогда переменная "s" будет содержать результат getOrSetOrWh независимо от того, что возвращает эта функция.

HOWEVER , экземпляр, созданный new someClass(), будет существовать, но недоступен , потому что он никогда не был назначен переменной (потенциальная утечка памяти) - только результат getOrSetOrWh независимо от того, что возвращается.

Цепочка передает то, что сгенерировано / возвращено слева направо.

foo().bar() 
// is like:
// foo() --> bar()
// or
// the method "bar" is within "foo"

Когда вы не выполняете цепочку, как в:

let s = new someClass();
let foo = s.getOrSetOrWhatever();

Затем экземпляр присваивается переменной s, а foo присваивается тому, что возвращает "getOrSetOrWhwhat",

0 голосов
/ 05 октября 2019

Нет, новый экземпляр не будет создаваться каждый раз, потому что код "new someClass ()" больше не будет вызываться

Вы объявили переменную с именем "someFunc".

Правая сторона вашего кода будет оценена, чтобы присвоить значение «someFunc»

Когда читается правая часть вашего кода, он сначала создаст новый экземпляр. Если у вас не было больше кода на правой стороне, он просто сохранил бы этот новый экземпляр в переменной.

Но, поскольку вы затем вызываете метод с именем "getOrSetWhwhat", результат "getOrSetWhwhat"будет храниться в вашей переменной.

Ваш экземпляр теперь просто где-то плавает в памяти и не сохраняется ни в одной переменной.

Вы создали экземпляр, вызвали метод (который либо сохраняетсяв этом экземпляре или хранится в объекте-прототипе класса) и сохраняет результат этого метода в вашей переменной.

0 голосов
/ 05 октября 2019

someFunc - это просто переменная здесь.

new someClass() будет вызываться каждый раз, если вы напишите someFunc как

const someFunc = () => new someClass().getOrSetWhatever()

0 голосов
/ 05 октября 2019

если вы напишите это как:

const someFunc = new someClass().getOrSetOrWhatever;

, то someFunc будет ссылкой (указателем) на метод (функцию) этого экземпляра someClass после того, как вы вызовете:

const someFunc = new someClass().getOrSetOrWhatever;    
someFunc();
...
someFunc();

такой же как:

let s = new someClass()
s.getOrSetOrWhatever()
..
s.getOrSetOrWhatever()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...