Как мне удалить номер свойства?

#javascript

#javascript

Вопрос:

 function Student(name, sclass, year, number, submissionYear)
{
     this.name = name;
     this.sclass = sclass;
     this.year = year;
     this.number = number;
     this.submissionYear = submissionYear;
}

// Edit : added OP's code from comments
let Manuel = new Student("Manuel", "lesi", "3", "98789", 2014);
console.log(Manuel.number);
delete Student.number;
console.log(Student); // The object still includes number as property  

Как мне удалить номер свойства, поскольку удаление Student.number не работает.

Комментарии:

1. что вы имеете в виду, что это не работает? подробнее

2. Вы всего лишь определяете функцию, а не выполняете ее или создаете ее экземпляр. Этого кода, похоже, недостаточно, чтобы помочь

3. var k = new Student(); delete k.number;

4. Student — это класс, а не объект.

5. Просто delete Manuel.number .

Ответ №1:

…поскольку удаление Student.number не работает

Student не имеет number свойства, поэтому удалять нечего. Объекты, созданные с помощью new Student do. Так , например:

 function Student(name, sclass, year, number, submissionYear)
{
    this.name = name;
    this.sclass = sclass;
    this.year = year;
    this.number = number;
    this.submissionYear = submissionYear;
}

var s = new Student();
console.log("number" in s); // true
delete s.number;
console.log("number" in s); // false  

Если вы хотите создать версию, Student которая создает объекты без number свойства, это возможно, но это плохая идея:

 function Student(name, sclass, year, number, submissionYear)
{
    this.name = name;
    this.sclass = sclass;
    this.year = year;
    this.number = number;
    this.submissionYear = submissionYear;
}

function NumberlessStudent() {
    Student.apply(this, arguments);
    delete this.number;
}
NumberlessStudent.prototype = Object.create(Student.prototype);
NumberlessStudent.prototype.constructor = NumberlessStudent;

var n = new NumberlessStudent();
console.log("number" in n); // false  

Или предпочтительно в ES2015 с class синтаксисом:

 class Student {
    constructor(name, sclass, year, number, submissionYear) {
        this.name = name;
        this.sclass = sclass;
        this.year = year;
        this.number = number;
        this.submissionYear = submissionYear;
    }
}

class NumberlessStudent extends Student {
    constructor(...args) {
        super(...args);
        delete this.number;
    }
}

const n = new NumberlessStudent();
console.log("number" in n); // false  

Это плохая идея, потому что, настраивая наследование таким образом, экземпляры подкласса ( NumberlessStudent ) должны обладать функциями экземпляров суперкласса ( Student ).

Ответ №2:

Ваш Student является конструктором, поэтому Student.number неверен, если только это не статический метод (но это не ваш случай).

Вы должны создать объект Student , т.е.

 const student = new Student('Mell', 'A', 1990, 500, 1994);
  

Затем вы можете использовать

 delete student.number
  

Смотрите этот фрагмент в качестве примера:

 function Student(name, sclass, year, number, submissionYear)
{
     this.name = name;
     this.sclass = sclass;
     this.year = year;
     this.number = number;
     this.submissionYear = submissionYear;
}

// Edit : added OP's code from comments
let Manuel = new Student("Manuel", "lesi", "3", "98789", 2014);

console.log('Number:', Manuel.number);
delete Manuel.number;
console.log('Number:', Manuel.number);  

Вы можете найти более подробную информацию о конструкторах и объектах в JavaScript здесь

Ответ №3:

Здесь Student является экземпляром student

 delete Student.number;
  

// Пример 2

 delete Student[number]; 
  

// Пример 3

 delete Student["number"];
  

вы можете удалить ключ объекта с помощью приведенного выше примера. но имейте в виду, что Student должен быть экземпляром, а не объектом функции

Комментарии:

1. Student[number] —> число не определено

2. Это должно быть delete Student['number'] .

Ответ №4:

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

Это должно сработать:

 var s = new Student('Gil', 'AAA', 2019, 123, 2018);
console.log(s.number); // prints 123
delete s.number;
console.log(s.number); // prints undefined
  

Ответ №5:

Вы можете попробовать это :

 let Manuel = new Student("Manuel", "lesi", "3", "98789", 2014) 
console.log(Manuel.number);
delete Manuel.number // if you try delete student.number then it not work
console.log(Manuel);
  

Ответ №6:

вы применяете метод delete к constructor . вы должны применить к instance Manuel вместо Student constructors

 function Student(name, sclass, year, number, submissionYear) {
  this.name = name;
  this.sclass = sclass;
  this.year = year;
  this.number = number;
  this.submissionYear = submissionYear;
}

// Edit : added OP's code from comments
let Manuel = new Student("Manuel", "lesi", "3", "98789", 2014);
console.log(Manuel.number);
delete Manuel.number;
console.log(Manuel);  

Ответ №7:

Используется delete для удаления свойства из объекта. Вы не можете удалить свойства из constructors (в данном случае Student), но вы можете удалить его из objects. Создайте объект и, используя delete , удалите свойство number

 function Student(name, sclass, year, number, submissionYear)
{
     this.name = name;
     this.sclass = sclass;
     this.year = year;
     this.number = number;
     this.submissionYear = submissionYear;
}

var a=new Student('a','3',3,4,6)
console.log(a)
delete a['number'];
console.log(a)