So what I need to do, is get the name of a class when its created.
class Car {
constructor(color) {
this.color = color;
}
}
newcar = new Car('Red');
objectNames = []
I need to get the name of the object I created, (newcar), into the array, (objectNames). I’ve tried to search it but I’m not even exactly sure what to search for. Thanks for the help!
asked Jun 20, 2020 at 23:46
2
do you mean something like this
objectNames = []
class Car {
constructor(carmaker,color) {
this.color = color;
this.carmaker=carmaker
}
saveob(){
objectNames.push({[this.carmaker]:this.color})
}
}
newcar = new Car('toyota','Red').saveob()
console.log(objectNames)
console.log(Object.keys(objectNames[0])[0])
console.log(objectNames[0].toyota)
answered Jun 20, 2020 at 23:59
Sven.higSven.hig
4,4502 gold badges7 silver badges18 bronze badges
3
Using a getter inside the class
class Car {
constructor(color) {
this._color = color;
}
get color(){
return this._color;
}
}
var newcar = new Car('Red');
var objectNames = [];
objectNames.push(newcar.color);
console.log(objectNames);
answered Jun 21, 2020 at 0:00
sonEtLumieresonEtLumiere
4,4193 gold badges7 silver badges32 bronze badges
Доброго времени суток! Я написал простой код:
package SelfBook_made.Other.Etudy;
import java.lang.Math;
public class Wheel {
double r;
Wheel(double r){
this.r = r; //инициализация колеса из конструктора
}
public double length1(){
return 2*(Math.PI)*r; //возврат длины окружности
}
public double square_wheel(){
return Math.PI*r*r; //возврат площади окружности
}
void c(){
System.out.println();
System.out.println("Длина колеса = " +length1());
System.out.println("Площадь колеса = " +square_wheel() );
}
public static void main(String[] args) {
Wheel w1 = new Wheel(5); //Первое колесо
Wheel w2 = new Wheel (3); // Второе колесо
w1.c();
w2.c();
}
}
На выходе программа даёт площадь и длину окружности колеса.
Как написать метод, чтобы моя программа возвращала имя колеса?
Чтобы на выходе было:
- Колесо w1:
- Длина колеса = …
- Площадь колеса = …
задан 14 сен 2015 в 14:02
Andrew KachalinAndrew Kachalin
2,8613 золотых знака24 серебряных знака47 бронзовых знаков
2
По идее, правильным решением будет в классе Wheel создать переменную string name
и инициализировать ее через конструктор.
Т.к. из самого объекта Вы не можете узнать (без костылей), какая переменная на него ссылается.
package SelfBook_made.Other.Etudy;
import java.lang.Math;
public class Wheel {
double r;
String name;
Wheel(String name, double r){
this.name = name;
this.r = r; //инициализация колеса из конструктора
}
public double length1(){
return 2*(Math.PI)*r; //возврат длины окружности
}
public double square_wheel(){
return Math.PI*r*r; //возврат площади окружности
}
void c(){
System.out.println("Колесо " + name + ":");
System.out.println("Длина колеса = " +length1());
System.out.println("Площадь колеса = " +square_wheel() );
}
public static void main(String[] args) {
Wheel w1 = new Wheel("Колесо1", 5); //Первое колесо
Wheel w2 = new Wheel("Колесо2", 3); // Второе колесо
w1.c();
w2.c();
}
}
ответ дан 14 сен 2015 в 14:07
4
Имена локальных переменных не существуют. Надо передавать строку в метод и выводить её. Ну либо дабавить колесу свойство с именем и выводить его.
void c(String name){
System.out.println("Колесо " + name + ":");
System.out.println("Длина колеса = " + length1());
System.out.println("Площадь колеса = " + square_wheel());
}
w1.c("w1");
w2.c("w2");
ответ дан 14 сен 2015 в 14:07
Qwertiy♦Qwertiy
121k24 золотых знака121 серебряный знак291 бронзовый знак
1
Ну, имена переменных заданных через var получить нельзя. Мне кажется, в вашем случае единственно допустимый вариант, это использовать ваши объекты (например, date) внутри других объектов. Тогда ключи можно собрать используя Object.keys ну или просто for (key in obj)
UPD: я скорее всего неправильно понял что вам нужно, но все же попробовал:
obj = {
date: {
"man1" : "1974, 10, 29"
}
}
result_obj = {};
Object.keys(obj).forEach(function(key) {
result_obj['_' + key] = obj[key];
});
console.log(result_obj);
А для чего вам нужно передавать объект с измененным именем? В большинстве случаев когда мне надо было дотянуться левой ногой до правого уха, в итоге выяснялось, что задача решалась много проще xD
Пушехвост 0 / 0 / 0 Регистрация: 15.09.2009 Сообщений: 234 |
||||
1 |
||||
Как узнать имя экземпляра объекта?16.09.2010, 18:58. Показов 16287. Ответов 10 Метки нет (Все метки)
Как изнутри экземпляра объекта узнать имя этого экземпляра, например:
Заранее спасибо!
0 |
0 / 0 / 1 Регистрация: 21.06.2010 Сообщений: 201 |
|
16.09.2010, 20:02 |
2 |
обычно применяется конструкция типа if (obj.constructor==objClass). Не припомню нужной функции, но при необходимости можно пропарсить obj.constructor.toString()
0 |
Пушехвост 0 / 0 / 0 Регистрация: 15.09.2009 Сообщений: 234 |
||||
18.09.2010, 22:52 [ТС] |
3 |
|||
Нет, obj.constructor.toString() возвращает код конструктора этого объекта,
0 |
0 / 0 / 1 Регистрация: 21.06.2010 Сообщений: 201 |
|
19.09.2010, 02:28 |
4 |
Сорри, невнимателен. Мне приходит в голову только такой вариант. Понятно, работает только в опере. Код for (var i in window) if (window[i]==obj) alert(i);
0 |
0 / 0 / 0 Регистрация: 29.07.2008 Сообщений: 90 |
|
23.09.2010, 14:04 |
5 |
tochno ta je problema bila…
0 |
0 / 0 / 1 Регистрация: 21.06.2010 Сообщений: 201 |
|
23.09.2010, 14:58 |
6 |
sergyu, это будет работать, только если Obj — твой тип; и перестанет правильно работать после var b = a; alert(b.name);
0 |
Shah |
|
03.10.2010, 19:00 |
7 |
Любой объект представляется атрибутом NAME/ Что мешает сделать так? |
Пушехвост 0 / 0 / 0 Регистрация: 15.09.2009 Сообщений: 234 |
||||
06.10.2010, 19:52 [ТС] |
8 |
|||
obj.name выдает, почему-то, undefined
0 |
sl_play 4 / 4 / 3 Регистрация: 25.05.2009 Сообщений: 2,576 |
||||
06.10.2010, 22:49 |
9 |
|||
создай свойство name, тогда ты сможешь к нему обратиться.
0 |
0 / 0 / 0 Регистрация: 15.09.2009 Сообщений: 234 |
|
06.10.2010, 23:31 [ТС] |
10 |
Таким образом можно узнать имя конструктора объекта,
0 |
3944 / 2858 / 665 Регистрация: 08.06.2007 Сообщений: 9,668 Записей в блоге: 4 |
|
07.10.2010, 01:43 |
11 |
По мне так у экземпляра объекта нет имени. До сих пор мы говорили об имени ссылки на объект. Но один и тот же экземпляр может иметь несколько ссылок либо не иметь ни одной.
0 |
Мне нужно получить не содержимое, а имя объекта.
Ситуация такая: делаю игру с инвентарем. Сначала создаю все передметы в виде объектов и добавляю их в объект «предметы». Далее создаю массив «инвентарь», куда потом добавляются найденные предметы. Чтобы сохранить игру, помещаю все нужные переменные, объекты и массивы в один объект, преобразую его в JSON и записываю в файл. При загрузке игры, сохраненный JSON преобразую обратно в объект.
Но проблема в том, что у предметов в свойствах присутствуют функции для использования их в игре. А функции не сохраняются в JSON. Поэтому при загрузке игры, предметы невозможно использовать, так как они загружаются без функций.
Можно решить эту проблему, просто обновив инвентарь после загрузки игры.
for(var i=1, i<инвентарь.length; i++){
if (инвентарь[i] !== null){
инвентарь[i] = предметы[инвентарь[i]];
}
}
Но проблема в том, что «инвентарь[i]» (содержимое: инвентарь[нож]) является объектом, поэтому такая запись добавляет в инвентарь null. Если как-то преобразовать «инвентарь[i]» в строку, то все будет работать как нужно.