zoukankan      html  css  js  c++  java
  • 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 属性不考虑原型链中的对象。
  • 相关阅读:
    OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
    用runtime来重写Coder和deCode方法 归档解档的时候使用
    Homebrew安装卸载
    Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing'
    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
    让nginx支持HLS
    iOS 字典转json字符串
    iOS 七牛多张图片上传
    iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them
    Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
  • 原文地址:https://www.cnblogs.com/caichongdd/p/2784614.html
Copyright © 2011-2022 走看看