#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)