1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

開眼!JavaScriptの2.5のまとめ プロパティへの参照の解決

Last updated at Posted at 2015-04-11

開眼!JavaScriptの2.5のまとめです。

##2.5 プロパティへの参照はどのように解決されるのか
オブジェクト内に存在しないプロパティにアクセスしようとする場合、JavaScriptではそのオブジェクトのコンストラクタ関数のprototypeオブジェクトを参照して(遡っていって)探し当てようとする。

配列オブジェクトを作成して、定義されていないtoLocaleString()にアクセスすると、定義されていないにも関わらず結果が返されます。

var myArray= ['foo', 'bar'];

console.log(myArray.toLocaleString());

結果
foo,bar

ここでの動作としては、myArrayにtoLocaleString()プロパティがあるかを探しに行きますが無いため、そのオブジェクトのコンストラクタ関数(ここではArray())のprototypeオブジェクトを参照しています。

//myArrayのコンストラクタ関数はArray()
console.log(myArray instanceof Array); →true

しかしArray()にもtoLocaleString()は無いため、さらにそのコンストラクタ関数のprototypeオブジェクトを参照しにいきます。
Array.prototypeのコンストラクタ関数はObject()なのでObject.prototypeを参照しに行きます。ここでtoLocaleStringが見つかったためメソッドが実行され、結果が返されました。

もしObject.prototypeにもなければundefinedを返します。

var myArray= ['foo', 'bar'];

console.log(myArray.hoge);

結果
undefined

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?