Потому что
this.name
не то же самое, что
Func.name
или
Func.prototype.name
. Вы в конструкторе записываете свойство
экземпляру объекта, а удалить пытаетесь из самого объекта.
Вот так будет работать, как вы ожидаете:
var func2 = new Func('hello');
delete func2.name;
func2.name // undefined
Может, это поможет вам разобраться:
function Func(name) {
this.name = name;
}
Func.prototype.name = 'Foo';
var f = new Func('Bar');
console.log(f.name); // "Bar"
delete f.name;
console.log(f.name); // "Foo"
delete f.name;
console.log(f.name); // "Foo"