为什么我的OwnPropsEqualTrue函数破坏了我的代码?

时间:2015-12-28 19:49:38

标签: javascript

花了3个小时试图找到

的来源
  

Object doesn't support property or method 'exec'

我收到了,这会产生更多错误,我已将其缩小到我的功能

Object.prototype.OwnPropsEqualTrue = function ( )
{
    var true_props = [];
    for ( var this_prop in this ) 
    {
        if ( this.hasOwnProperty(this_prop) && this.this_prop === true ) 
        {
            true_props.push(this_prop);     
        }           
    }
    return true_props; 
}

用于对象操作的是字符串到布尔值的映射,例如

{ "SomeBoolean" : true, "SomeOtherBoolean" : false, "IsInChicago" : false } 

由于某种原因,此函数的存在导致我提到的错误并指向

if(isCurrentExternalUser=isExternalUser(),isCurrentExternalUser&&BindClickOnO365SettingsMenu(),isBizStampingDlg=!1,window.location.href.indexOf("IsDlg=1")>-1&&(window.location.href.search(/Upload.aspx/i)>-1||window.location.href.search(/UploadEx.aspx/i)>-1)?(isBizStampingDlg=!0,isUploadDialog=!0):isUploadDialog=!1,window.location.href.indexOf("IsDlg=1")>-1&&window.location.href.search(/aclinv.aspx/i)>-1?(isBizStampingDlg=!0,isSharingDialog=!0):isSharingDialog=!1,isRightToLeft=$("html:first").attr("dir")=="rtl"?!0:!1,uiVersion==15||!isBizStampingDlg)

SharePoint中的JavaScript库行。

有人可以帮我理解我在这里做错了什么吗?浏览器是IE,顺便说一句。

1 个答案:

答案 0 :(得分:1)

如果你必须向Object原型添加一个方法(你可能不应该),请用Object.defineProperty添加它:

Object.defineProperty(Object.prototype, "ownTrueProperties", {
  value: function() {
    return Object.keys(this).filter(function(key) {
      return this[key] === true;
    }, this);
  }
});

这将使该属性不可枚举,因此不会弄乱for ... in循环。