首先看一段代码:
Fun = new Object({b:3});
Fun.prototype = {c:4};
Fun.d = 5;
console.log(Fun.hasOwnProperty("b"));//true
console.log(Fun.hasOwnProperty("c"));//false
console.log(Fun.hasOwnProperty("d"));//true
<pre name="code" class="javascript">console.log(Fun);//Object {b: 3, prototype: Object, d: 5}
给出了三个结果。解释一下,b是Object实例化时给出的属性,自然是Fun对象的属性,true。c是Fun对象prototype的属性,所以结果为false。d是Fun直接赋予的属性,所以结果也为true。
最后console了下Fun对象,hasOwnProperty的判断结果一目了然。
然后再来一段代码:
function Fun(a){
this.a = 2;
}
Fun.prototype = {c:4};
Fun.d = 5;
console.log(Fun.hasOwnProperty("a"));//false
console.log(Fun.hasOwnProperty("c"));//false
console.log(Fun.hasOwnProperty("d"));//true
console.log(Fun);//Fun(a)
现在的状态下,由于Fun为构造器,所以a属性不属于Fun所有。new一个新对象可继承到a属性//由于d可以被判断true,所以我觉得Fun对象是可以调用hasOwnProperty的。