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.