“this [key]”在带有原型的javascript for()中

时间:2011-08-02 12:42:28

标签: javascript prototype-programming

我在这个脚本的第5行有一个JS错误(var el = this [key];)。它适用于FF,Chrome,Safari但不适用于IE。有人可以帮帮我吗?

Object.prototype.between = function( value )
{
    var value = parseFloat(value);
    for (key in this) {         
        var el = this[key];
        var v = key.split('-');         

        var min = parseFloat(v[0]);
        var max = parseFloat(v[1]);

        if (value >= min && value < max) { return el; }
    }
    return false;
}

感谢您提前

1 个答案:

答案 0 :(得分:2)

您最有可能遇到“未经过滤的问题”。当迭代for / in循环时,IE遍历对象的所有属性和方法,以包括它从原型获得的那些属性和方法。这导致了一些问题,因为您的代码通常认为它只会遇到某种属性。最常用的for / in过滤方法如下所示,我确保当前元素实际上是被迭代对象的属性,而不仅仅是被继承的东西。通过确保当前属性与您期望的类型,实例或值完全相同,您可以在此类检查中获得更具体的信息。

Object.prototype.between = function( value )
{
    var value = parseFloat(value);
    for (key in this) {         
        if( Object.prototype.hasOwnProperty.call( key, this ) ) {
            var el = this[key];
            var v = key.split('-');         

            var min = parseFloat(v[0]);
            var max = parseFloat(v[1]);

            if (value >= min && value < max) { return el; }
        }
    }
    return false;
}

如评论中所述,您可以对代码执行其他操作,以使其更加可靠并且不易出错。您应该开始养成通过http://www.jshint.com

运行所有代码的习惯