请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

什么情况下 hasOwnProperty 会返回 false?

class Mammal {
  constructor() {
    this.home = 'earth'
  }
  sayHome() {
    console.log(this.home)
  }
}

class Person extends Mammal {
  constructor(name, age, height) {
    super()
    this.name = name
    this.age = age
    this.height = height
  }
  sayName() {
    console.log(this.name)
  }
}

const obj = new Person('Norbert', 27, 178)

for (const key in obj) {
  console.log(key) // home name age height
  // 没有原型上的 sayHome 和 sayName,更没有Object 原型上的属性
  console.log(obj.hasOwnProperty(key)) // true true true true
  // 不存在 false 的情况
}

所以老师能不能写一个在 for in 里执行 hasOwnProperty 还能返回 false 的例子

我找了很久都没有找到

正在回答

1回答

双越 2020-06-08 18:09:06
const obj = { a: 100 }
obj.a // 100
obj.hasOwnProperty('a') // true
obj.toString // ƒ toString() { [native code] }
obj.hasOwnProperty('toString') // false


0 回复 有任何疑惑可以回复我~
  • 提问者 h4ck3r #1
    那意思说 for in 这个语法里,根本不会遍历原型链上的属性和方法咯?那这个深克隆函数是不是就不需要在这里写 hasOwnProperty 这个方法来做判断了
    回复 有任何疑惑可以回复我~ 2020-06-08 22:55:04
  • 提问者 h4ck3r #2
    这样,我刚才又试了一下,如果是用class里定义的 prototype 上的函数不会有问题。但是如果是使用 Person.prototype.sayHello = ()=>{} 这种方法,不用 hasOwnProperty 就会遍历到。
    回复 有任何疑惑可以回复我~ 2020-06-08 23:12:43
  • 双越 回复 提问者 h4ck3r #3
    所以说 for in 中还是加上 hasOwnProperty 比较好。
    回复 有任何疑惑可以回复我~ 2020-06-09 07:43:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信