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.

70 queries. HTML convert time: 1.428 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン