此函数如何确定prototype
上是否存在属性?
function hasPrototypeProperty(object, name){
return !object.hasOwnProperty(name) && (name in object);
}
我对两件事感到困惑:
!
运算符对hasOwnProperty
方法做了什么?
虽然&&
似乎也说(name in object)
也必须是真的,但我有点不确定......
我知道hasOwnProperty
只会返回true
如果某个实例上存在该属性,但我读过它仍会检查prototype
,如果是,那该怎么办?如果实例是唯一重要的事情,这似乎是一件奇怪的事情?
提前致谢!
答案 0 :(得分:1)
如果继承了enumerable property,它基本上会检查 。
为此,它会检查hasOwnProperty()
方法,以查看对象中的属性(!非运算符)中的属性是否直接属于对象:
未在hasOwnProperty
!object.hasOwnProperty(name)
中设置。
如果 in operator 返回true,则表示它属于对象的原型链
即使它不是直接属性,也可以在对象上调用它,因为它们属于继承
但请记住name in object
仅在属性可枚举时才返回true;因为例如toString()
不会(因为它是不可数属性)。
答案 1 :(得分:1)
什么是!运算符对hasOwnProperty方法做了什么?
这是boolean NOT operator。它对方法没有任何作用,而是对调用的结果没有任何作用。
而&&似乎说(对象中的名字)也必须是真的,我有点不确定......
是的,这就是它的作用。
我知道如果实例上存在属性,hasOwnProperty将只返回true,但是我读它仍然会检查原型,如果是,那该怎么办?
不是,它没有检查原型。但in
operator会这样做。
基本上,如果hasPrototypeProperty
没有给定true
的自己的属性,object
函数将返回name
,但是有一个可能的继承属性name
1 {} object
。