在使用delete删除原型链的属性和方法时课程讲的是错的
首先我看了视频和PDF资料
然后我实际操作了,我故意删除prototype原型链上的方法和属性,很明显,是能删除的,所以我认为老师讲的是错的
上代码
function Animal(name, nums){
this.name =name
this.nums=nums
this.getInfo = function(){
console.log(this.name+':' +this.nums)
}
}
Animal.prototype.says = 'lalal'
Animal.prototype.saysa = function(){
console.log('shja')
}
console.log(Animal.prototype.says)
console.log(Animal.prototype.saysa)
delete Animal.prototype.says
delete Animal.prototype.saysa()
console.log(Animal.prototype.says) //不可以获得原型链属性
console.log(Animal.prototype.saysa) //可以获得原型链方法
console.log(Animal.prototype.saysa()) //不可以获得原型链方法
源自:JS面向对象
7-1 关键词(上)
25
收起
正在回答
2回答
同学你好,教辅是没有错的。教辅上说的是不能删除原型链上的属性:

那么就需要先实例化出来一个对象,去删除对象上的属性:

依旧能访问:

而同学是直接删除的prototype这个对象的属性(方法),是没有涉及到原型链,所以可以删除。
祝学习愉快~
彬十二
2020-06-17 17:19:48
为了直观观察,我重新上传带有字符串的输出
function Animal(name, nums){
this.name =name
this.nums=nums
this.getInfo = function(){
console.log(this.name+':' +this.nums)
}
}
Animal.prototype.says = 'lalal'
Animal.prototype.saysa = function(){
console.log('shja','原型方法')
}
console.log(Animal.prototype.says, 'Animal.prototype.says')
console.log(Animal.prototype.saysa, 'Animal.prototype.saysa')
delete Animal.prototype.says
delete Animal.prototype.saysa()
console.log(Animal.prototype.says, 'Animal.prototype.says') //不可以获得原型链属性
console.log(Animal.prototype.saysa , 'Animal.prototype.saysa') //可以获得原型链方法
console.log(Animal.prototype.saysa(), 'Animal.prototype.saysa()') //不可以获得原型链方法
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星