Javascript中对象的every()模拟

Javascript中对象的every()模拟,javascript,object,for-loop,Javascript,Object,For Loop,我有一个函数,它检查两个DOM元素的计算样式属性值,如果每个属性都相等,它应该返回true或false checkUserBlock: function (userBlockSelector, properties) { var checker = this.setCheckingStyle(userBlockSelector, properties); var userBlockCompStyle = getComputedStyle(this.getUserB


我有一个函数,它检查两个DOM元素的计算样式属性值,如果每个属性都相等,它应该返回true或false

checkUserBlock: function (userBlockSelector, properties) {
        var checker = this.setCheckingStyle(userBlockSelector, properties);
        var userBlockCompStyle = getComputedStyle(this.getUserBlock(userBlockSelector));
        var checkBlockCompStyle = getComputedStyle(checker);
        var checkingStyle = this.parseCheckingStyle(properties);
        for(var key in checkingStyle){
            return (userBlockCompStyle.getPropertyValue([key].toString()) == checkBlockCompStyle.getPropertyValue([key].toString()));
        }
    }

我在返回所有属性的结果时遇到问题,我考虑了每个()函数,但它只针对数组。如何将其用于对象,或者您可以提供一个不同的解决方案而不使用jQuery?

这将为您提供一个属性名称数组,然后您可以对其进行迭代(改编自):


您可以定义如下函数:

function every(callback) { 
  for(prop in this) { if(!callback(this[prop])) return false; };
 return true;
}
您可以将其应用于对象,然后它将迭代其可枚举属性:

var obj = {1: 1, b: 3, E: 4};
Object.defineProperty(obj, 'every', { value: every, enumerable: false, writable: true, configurable: true });
obj.every(function(item) { return item < 5; })
//true
obj.every(function(item) { return item < 1; })
//false
 function every(callback) { 
      var propertyNames = Object.getOwnPropertyNames(this);
      var length = propertyNames.length;
      for (var i=0; i < length; i++) {
         if(!callback(this[propertyNames[i]])) return false; 
      }
     return true;
 }
或者,如果您不希望每个属性都应用于原型继承的属性,则可以使用Object.getPropertyNames:

var obj = {1: 1, b: 3, E: 4};
Object.defineProperty(obj, 'every', { value: every, enumerable: false, writable: true, configurable: true });
obj.every(function(item) { return item < 5; })
//true
obj.every(function(item) { return item < 1; })
//false
 function every(callback) { 
      var propertyNames = Object.getOwnPropertyNames(this);
      var length = propertyNames.length;
      for (var i=0; i < length; i++) {
         if(!callback(this[propertyNames[i]])) return false; 
      }
     return true;
 }
函数每个(回调){
var propertyNames=Object.getOwnPropertyNames(this);
变量长度=propertyNames.length;
对于(变量i=0;i
您可以将其拍打到对象的ProtyType上,而无需担心使其处于无法计数的状态:

var obj = Object.create({every: every}); 
obj[1]=1; obj.b=3; obj.E=4;
obj.every(function(item) { return item < 5; })
//true
obj.every(function(item) { return item < 1; })
//false
var obj=Object.create({every:every});
obj[1]=1;对象b=3;目标E=4;
obj.every(函数(项){返回项<5;})
//真的
obj.every(函数(项){返回项<1;})
//假的

没有理由不使用
Object.keys
。不,你不能像上一个例子那样,在不担心可枚举性的情况下,将方法拍打到
Object.prototype
。@Bergi感谢你的评论。我错误地假设了那个对象。getProrotypeOf({})!=对象。原型。我已经修复了最后一个示例,因此它现在有了一个非共享的原型。