object对象的hasOwnProperty propertyIsEnumerable两个方法的使用

首先说下基本的概念:

hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员,返回一个bool值
一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:  propertyIsEnumerable 属性,返回 Boolean 值,指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。

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)
如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。

典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。
propertyIsEnumerable 属性不考虑原型链中的对象。

发布了38 篇原创文章 · 获赞 1 · 访问量 563

猜你喜欢

转载自blog.csdn.net/weixin_43718291/article/details/103205232