Удаление свойств двумя способами, но работает только один
delete удаляет свойство из некоторого объекта.
function Man() {
this.eye = 2;
this.mouth = 1;
}
Man.prototype.walk = function (arguments) {
console.log("Im walking.");
}
var man1 = new Man();
var man2 = new Man();
delete man1.constructor;
console.log(man1.constructor); // function Man()
Там, делегируя, конечно, я удаляю собственность man1
прототип constructor
имущество. Ну, по крайней мере, это мое намерение. Но когда я регистрируюсь, я все еще получаю функцию Конструктора.
Однако эта проблема исправлена, когда
delete man1.constructor.prototype.constructor;
console.log(man1.constructor); // function Object()
Теперь я получаю пустой объект. Как я должен.
Мой вопрос: почему это второе решение работает, а первое - нет? Это из-за делегирования? Я слышал, что тот, который работает delete man1.constructor.prototype.constructor;
использует "неявную" ссылку. Что это значит? Еще кое-что. Почему я все еще опорожняюсь Object
а свободной памяти нет?
1 ответ
Почему вы снова получаете конструктор?
Так как delete
работает только для прямых / собственных свойств объекта, но ваш Man
не имеет прямого / собственного свойства с именем constructor
, constructor
находится в цепи прототипа Man
который исходит от Man.prototype
, Когда вы получаете доступ к этому свойству, оно просто идет и получает его из цепочки прототипов.
Отсюда вы также можете сделать вывод, что свойства из цепочки прототипов могут только считываться, но не изменяться. Если вы хотите изменить, вам нужен прямой доступ.
Однако эта проблема исправлена, когда
В этом случае вы получили доступ к оригинальному объекту и удалили его из этого объекта. Для этого объекта constructor
является прямой / собственной собственностью.