В Javascript функция-конструктор и определение прототипа образуют процесс и определение для создания новых объектов с известным набором свойств/методов.
Каждый раз, когда вызывается конструктор, создается новый объект этого типа. Каждый из этих новых объектов, которые создаются, представляет собой экземпляр этого типа объекта. При первом построении он имеет известный набор свойств/методов, которые дают ему известное поведение или набор значений.
Таким образом, это создает новый экземпляр объекта:
var foo = new myConstructor();
Каждый раз, когда вы называете этот конструктор, он создает еще один экземпляр этого объекта.
В Javascript ссылка является средством обращения к этому вновь созданному объекту. У вас может быть много ссылок на тот же объект.
Экземпляр - это фактический объект в памяти.
A ссылка - это переменная или аргумент или свойство, которое в настоящее время ссылается или указывает на этот экземпляр.
Поскольку нет прямого доступа ко всем случаях в Javascript, один всегда должен иметь ссылку к нему для того, чтобы получить к нему доступ. И, фактически, так работает сборка мусора Javascript. Когда больше нет ссылок на какой-либо объект в реальном достижимом коде, тогда экземпляр объекта становится пригодным для сбора мусора и может быть удален.
Вы используете ссылку для доступа к объекту.
var test0 = new myConstructor();
var test1 = test0;
var test2 = test0;
var test3 = test2;
В Javascript все четыре перечисленные выше переменные содержат ссылку на тот же вновь созданный объект. Для тех, кто знаком с другими языками, ссылка в Javascript в этом случае больше похожа на указатель, чем на другие языки, которые могут ссылаться на ссылку. Вы можете использовать эту ссылку, чтобы изменить один общий объект:
var test0 = new myConstructor();
var test1 = test0;
test0.myProp = "something"
test1.myProp = "whatever";
console.log(test0.myProp); // "whatever"
console.log(test1.myProp); // "whatever"
console.log(test0 === test1); // true
Оба test0
и test1
относятся к одному объекту, так изменяя свойства или вызов метода ссылки на объект в любой переменной действует на точно такой же объект.
При использовании термина ссылка в контексте Javascript, это не работает так же, как этот термин в контексте C++. Например, если вы присваиваете переменную test0
:
var test0 = new myConstructor();
var test1 = test0;
test0 = {greeting: "hello"};
Это просто ставит другую ссылку на объект в test0
и не имеет никакого эффекта на объект, test0
использования для обозначения или тот, который test1
в настоящее время относится к , Вот почему я говорю, что ссылки на объекты в Javascript ведут себя скорее как указатели, чем ссылки на других языках. Я не пытаюсь придумать какой-либо Javascript lingo здесь, просто чтобы сравнить его с известными функциями на других языках, чтобы объяснить, как работает ссылка на Javascript.
Что касается вопросов/ответов, на которые вы ссылаетесь в своем вопросе.
This question you referenced спрашивает:
Иногда я слышу, как люди говорят, «ссылка на объект», а некоторые говорят «а экземпляр объекта» В чем разница?
И выбранный ответ говорит, что это:
переменная будет содержать ссылку на экземпляр объекта.
Фактический объект является экземпляром.
Переменная/переменные, используемые для доступа к объекту, содержат ссылки .
Это в значительной степени то, что я сказал.Я добавил, что ссылка может быть сохранена в свойстве или аргументе, а также в обычной переменной.
The other question you referenced пытается ответить на аналогичный вопрос без учета какого-либо конкретного языка, и это становится намного более проблематичным, поскольку, как вы указали, все термины не означают абсолютно то же самое на каждом компьютерном языке. Таким образом, этот другой вопрос и его ответы концептуально конструктивны, но не специфичны для Javascript и, следовательно, недостаточно для Javascript.
Идея, что ссылка является экземпляром объекта, является бессмыслицей. – Pointy
Язык является гибким и не всегда точным. Тем более, что эти термины используются для описания различных языков, а разные программисты имеют с ними различный опыт. – Barmar
Вы не можете использовать слово «экземпляр», не используя слово «класс». – Barmar