模拟环境
// 如何判断原型链上重复的属性
// 模拟一个原型链 Baz => Bar => Foo => FooProto => Object => null
const FooProto = {
ak: 1
}
const Foo = Object.create(FooProto)
Foo.ak = 2
Foo.aj = 4
const Bar = Object.create(Foo)
Bar.ak = 3
Bar.aj = 5
Bar.am = 7
const Baz = Object.create(Bar)
"如何判断原型链上重复的属性?"继续阅读
介绍了 hasOwnProperty 的作用及其与 in 操作符的区别,强调其仅检测对象自身属性。分析了两种失效场景:对象存在同名 hasOwnProperty 方法或通过 Object.create(null) 创建无原型链对象,并提供了解决方案,如使用 Object.prototype.hasOwnProperty.call 强制调用原生方法以确保准确性。
通过示例分析了 JavaScript 中作用域和 this 的取值规则,解释了方法内变量查找优先级及其与 this 的关系。构造函数中变量优先取局部作用域值,若返回 this.name 则取实例属性值;若实例无对应属性,则沿原型链查找,返回原型上的 name 值。