总结
- delete 只是断开了属性和宿主当关系,而不会去操作宿主中的属性。[^1]
- delete 只能删除自有属性,不能删除继承属性,所以 protorype 上的属性不能通过删除对象上的属性删除
《Javascript 权威指南》6.3 章
场景
当需要删除对象的属性时,我们会使用delete
关键字来删除。
1 | var man = { |
上面的例子说明了,只是断开了属性和宿主的联系。
1 | function Person() { |
上述代码说明,delete 只能删除对象自己的属性,不能删除继承的属性。
通过注释掉this.name
更能说明问题,上面将输出都是lisi
,因为实例自己没有自己的 name 属性,输出的是 prototype 上的属性,即使 delete 掉 man.name,protorype 上的属性仍然存在。