首先说下基本的概念:
hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员,返回一个bool值
var bStr = "Test String".hasOwnProperty("split"); // 得到false, 因为不能检测原型链中的属性
var bStr1 = String.prototype.hasOwnProperty("split"); //String对象的原型上本来就有这个属性,自然返回true
var bObj = ({fnTest:function(){}}).hasOwnProperty("fnTest"); // 返回true,因为不是检测原型中的属性
hasOwnProperty的用法不仅仅在此,在Jquery中在编写插件中,少不了的一步,就是初始化参数,其中一个很重要的方法就是$.extend();他的原理就是应用了hasOwnProperty()方法;
利用for in 循环遍历对象成员中,有没有相同名称的对象成员,有的话就用这个新的对象成员替换掉旧的,通过这种方式,我们就可以通过修改方法中的参数变化,从而控制程序的流程,而对于那些没有改变的部分,仍使用默认值进行控制
我们自己也可以简单的模拟一下这个extend函数,如下
function extend(target,source){//target 旧的 source新的 for (var i in source){ if(target.hasOwnProperty(i)){ target[i]=source[i]; } } return target; } var a1={"first":1,"second":"lyl","third":"bob"}; var b1={"third":"leo"}; extend(a1,b1); for(var i in a1){ alert(a1[i]);//原本是bob,现在变成leo了 }
通过这个例子 我们就可以通过修改默认值的参数值来修改页面了。
这里我们会提高另外一个方法,就是propertyIsEnumerable,通过这个方法我们可以检测出这个对象成员是否是可遍历的,如果是可遍历出来的,证明这个对象就是可以利用for in 循环进行遍历的
格式如下:object.propertyIsEnumerable(proName)