Итак, я в настоящее время изучаю ESM, и я занимался практикой, экспортируя и импортировав два класса. В файле, где я создал классы, я также создал два объекта, которые являются экземплярами этих классов. Во втором файле я импортировал оба класса, но не в экземпляры, я затем скопировал и вставил код из первого файла в второй, чтобы проверить, импортировали ли классы, и я забыл, что я не экспортировал экземпляры, но он все еще работал. Вот первый файл. < /P>
//tests.js (file one)
export class Person{
#age;
constructor(name, age){
this._name = name;
this.#age = age;
}
get name(){
return this._name;
}
intro(){
console.log(`My name is ${this._name} and I am ${this.#age} years old`);
}
set changeName(newName){
if(newName.length < 3 && typeof newName === 'string'){
console.log('ERROR: Name cannot be less than 3 characters (Name remains unchanged)');
return;
}
this._name = newName;
}
get age(){
return this.#age;
}
birthday(){
this.#age++;
}
};
export default class Safe{
#owner;
#secret;
#code;
constructor(secret, code, owner){
this.#secret = secret;
this.#code = code;
this.#owner = owner;
}
getSecret(code){
if(code !== this.#code){
console.log('!INCORRECT CODE!');
return;
}
console.log(this.#secret);
}
get ownerHint(){
return `Owner first two letters -> ${this.#owner[0]}${this.#owner[1]}`
}
changeCode(newCode, owner){
if(owner[0] !== this.#owner[0]){
console.log(`ERROR: OWNER VERIFICATION FAILED`);
return;
}
this.#code = newCode;
}
}
const secret = new Safe('I have a cat!', 2818, 'Sam');
console.log(secret.ownerHint);
secret.getSecret(2818);
secret.changeCode(2817, 'Sam');
secret.getSecret(2817);
const sam = new Person('Sam', 21);
console.log(sam.age);
console.log(sam.name);
sam.intro();
sam.changeName= 'Sammy';
sam.birthday();
console.log(sam.age);
sam.intro();
< /code>
Вот второй файл (файл я импортировал оба класса): < /p>
//test2.js
import Safe, { Person } from "./tests.js"
const newSafe = new Safe('I have a cat!', 2818, 'Sam');
const newPerson = new Person('Sam', 17);
//here is where the error is made, but for some reason IT WORKS?
//the sam and secret instances are only declared in the tests.js file
console.log(secret.ownerHint);
secret.getSecret(2818);
secret.changeCode(2817, 'Sam');
secret.getSecret(2817);
console.log(sam.age);
console.log(sam.name);
sam.intro();
sam.changeName = 'Sammy';
sam.birthday();
console.log(sam.age);
sam.intro();
< /code>
Как второй файл узнает о существовании экземпляра «SAM» и «Secret»? Теперь, еще более запутанно, чем это, заключается в том, что когда я запускаю второй файл (Node test2.js), код работает нормально, пока не достигнет точки, а затем он просто выбрасывает ссылочную ошибку: «Секрет не определяется» Вот выход < /p>
Owner first two letters -> Sa
I have a cat!
I have a cat!
21
Sam
My name is Sam and I am 21 years old
22
My name is Sammy and I am 22 years old
file:///home/javascript-projects/test2.js:8
console.log(secret.ownerHint);
^
ReferenceError: secret is not defined
< /code>
Как, черт возьми, это происходит от того, чтобы вывести все, что хорошо, как в экземплярах «секрет», так и в «SAM», а затем внезапно изменить свое мнение и бросить ошибку. Почему бы просто не бросить ошибку в первую очередь? О, и когда я набираю это, я пытался проверить, удалив весь код, за исключением синтаксиса импорта, и он все еще работал, за исключением случаев, когда он не бросал справочную ошибку.
Подробнее здесь: https://stackoverflow.com/questions/796 ... lasses-wer
Почему я могу получить доступ к объектам, которые не были объявлены в файле? Только занятия были экспортированы ⇐ Javascript
Форум по Javascript
1748648212
Anonymous
Итак, я в настоящее время изучаю ESM, и я занимался практикой, экспортируя и импортировав два класса. В файле, где я создал классы, я также создал два объекта, которые являются экземплярами этих классов. Во втором файле я импортировал оба класса, но не в экземпляры, я затем скопировал и вставил код из первого файла в второй, чтобы проверить, импортировали ли классы, и я забыл, что я не экспортировал экземпляры, но он все еще работал. Вот первый файл. < /P>
//tests.js (file one)
export class Person{
#age;
constructor(name, age){
this._name = name;
this.#age = age;
}
get name(){
return this._name;
}
intro(){
console.log(`My name is ${this._name} and I am ${this.#age} years old`);
}
set changeName(newName){
if(newName.length < 3 && typeof newName === 'string'){
console.log('ERROR: Name cannot be less than 3 characters (Name remains unchanged)');
return;
}
this._name = newName;
}
get age(){
return this.#age;
}
birthday(){
this.#age++;
}
};
export default class Safe{
#owner;
#secret;
#code;
constructor(secret, code, owner){
this.#secret = secret;
this.#code = code;
this.#owner = owner;
}
getSecret(code){
if(code !== this.#code){
console.log('!INCORRECT CODE!');
return;
}
console.log(this.#secret);
}
get ownerHint(){
return `Owner first two letters -> ${this.#owner[0]}${this.#owner[1]}`
}
changeCode(newCode, owner){
if(owner[0] !== this.#owner[0]){
console.log(`ERROR: OWNER VERIFICATION FAILED`);
return;
}
this.#code = newCode;
}
}
const secret = new Safe('I have a cat!', 2818, 'Sam');
console.log(secret.ownerHint);
secret.getSecret(2818);
secret.changeCode(2817, 'Sam');
secret.getSecret(2817);
const sam = new Person('Sam', 21);
console.log(sam.age);
console.log(sam.name);
sam.intro();
sam.changeName= 'Sammy';
sam.birthday();
console.log(sam.age);
sam.intro();
< /code>
Вот второй файл (файл я импортировал оба класса): < /p>
//test2.js
import Safe, { Person } from "./tests.js"
const newSafe = new Safe('I have a cat!', 2818, 'Sam');
const newPerson = new Person('Sam', 17);
//here is where the error is made, but for some reason IT WORKS?
//the sam and secret instances are only declared in the tests.js file
console.log(secret.ownerHint);
secret.getSecret(2818);
secret.changeCode(2817, 'Sam');
secret.getSecret(2817);
console.log(sam.age);
console.log(sam.name);
sam.intro();
sam.changeName = 'Sammy';
sam.birthday();
console.log(sam.age);
sam.intro();
< /code>
Как второй файл узнает о существовании экземпляра «SAM» и «Secret»? Теперь, еще более запутанно, чем это, заключается в том, что когда я запускаю второй файл (Node test2.js), код работает нормально, пока не достигнет точки, а затем он просто выбрасывает ссылочную ошибку: «Секрет не определяется» Вот выход < /p>
Owner first two letters -> Sa
I have a cat!
I have a cat!
21
Sam
My name is Sam and I am 21 years old
22
My name is Sammy and I am 22 years old
file:///home/javascript-projects/test2.js:8
console.log(secret.ownerHint);
^
ReferenceError: secret is not defined
< /code>
Как, черт возьми, это происходит от того, чтобы вывести все, что хорошо, как в экземплярах «секрет», так и в «SAM», а затем внезапно изменить свое мнение и бросить ошибку. Почему бы просто не бросить ошибку в первую очередь? О, и когда я набираю это, я пытался проверить, удалив весь код, за исключением синтаксиса импорта, и он все еще работал, за исключением случаев, когда он не бросал справочную ошибку.
Подробнее здесь: [url]https://stackoverflow.com/questions/79646208/why-can-i-access-objects-that-werent-declared-in-the-file-only-the-classes-wer[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия