Safari と hasOwnProperty
2006-3-17 13:50
ECMAScript (JavaScript) で、オブジェクトのあるプロパティ(メソッド)が、もともと存在するものか、prototype で追加したものかどうかを調べたいときがあります。このようなときに hasOwnProperty が便利です。たとえば
if(options) {
for (var key in options) {
if(options.hasOwnProperty(key)) element[key] = options[key];
}
}
このような感じで、オブジェクトのプロパティをループで回して使う場合です。
さて、Safari の JavaScript の不備: Days on the Moonによると、Safari は 2.02 で hasOwnProperty に対応したようです。実際に Mac OS X 10.3 の Safari 1.3.2 では、次のようなエラーが表示されました。
Value undefined (result of expression args.hasOwnProperty) is not object.
このエラーははてなブックマークでも出るものです。回避策がないものかと探していたところ、オブジェクト指向JavaScript: クロージャで遊んでみるという記事を見つけました。safariにはhasOwnPropertyメソッドが実装されていませんが、同等のメソッドを独自実装しています。
と書かれていたのでソースを拝見したところ、Safari 用のコードが書かれていたので、ありがたくパクらせて拝借させていただきました。
/* for Older Safari */
if (!Object.hasOwnProperty) {
Object.prototype.hasOwnProperty = function(it) {
return (this[it] && !this.constructor.prototype[it]);
}
}
これで古い Safari でも hasOwnProperty が使えるようになりました。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.