gpt4 book ai didi

javascript - Javascript 中 every( ) for object 的模拟

转载 作者:行者123 更新时间:2023-11-29 21:50:33 25 4
gpt4 key购买 nike


我有一个函数,它检查两个 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()));
}
}

我在返回所有属性的结果时遇到问题,我考虑过 every() 函数,但它仅适用于数组。我如何将它用于对象,或者您可以提供不使用 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

或者你可以猴子修补 Object.prototype 来为所有对象提供 every 方法:

Object.defineProperty(Object.prototype, 'every', { value: every, enumerable: false, writable: true, configurable: true });

或者,如果您不希望每个应用到原型(prototype)继承的属性,您可以使用 Object.getPropertyNames:

 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;
}

您可以将其添加到对象的原型(prototype)上,而不必担心将其变成不可枚举的:

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

关于javascript - Javascript 中 every( ) for object 的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29470300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com