8

Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
  return (x ^ 0) === x;
}
console.log(Number.isInteger(1));

IE10 ブラウザでエラーがスローされます

4

3 に答える 3

9

明らかに、IE は DOM オブジェクトと Javascript オブジェクトを別々に扱い、Object.prototype を使用して DOM オブジェクトを拡張することはできません。

IE では、ネイティブではないプロトタイプを使用できません。

次のように、別の関数(必要に応じてグローバル)を作成する必要があります

function isInteger(num) {
  return (num ^ 0) === num;
}

console.log(isInteger(1));
于 2014-10-21T09:10:18.353 に答える
2

MSIE のネイティブ プロトタイプに追加する際に問題が発生する可能性がありますが、関数本体は に追加されるメソッドには不適切ですNumber.prototype

プロトタイプのメソッドは型のインスタンスで呼び出され、インスタンスはとして渡されますthis(そして、プリミティブではなく、常にオブジェクトになります)。

したがって、より正しい実装は次のようになります。

Number.prototype.isInteger = function() {
  return (this ^ 0) === +this;
}

使用法:

(1).isInteger();

代わりに使用したい場合は、関数をプロトタイプではなくオブジェクトにNumber.isInteger(n)直接追加する必要がありました。この関数の MDN ページには、Numberこれに対する厳密なシムがあります。

于 2014-10-21T09:31:00.187 に答える