Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

chromeのコンソールで関数の成り立ちが見たい

pushメソッドの中身はどうなっているのか知りたくてコンソールでArray.prototype.pushと入れてもpushの中身が出てきません。どうすれば見れますか?

sub.js:1 ƒ push() { [native code] }
0

1Answer

関数の中身が [native code] と出るものは、主に各 JavaScript エンジンやブラウザが機能提供しているもので、そもそも "JavaScript としてのソースコード" が存在しないものです。

実体としてはブラウザやエンジンを実装した言語(C/C++等)や内部実装用の独自言語で記述されているもので、基本的に実行時に中身を見ることはできません。

詳しく仕組みが知りたい、というのであれば、JavaScript が標準で提供している関数は、仕様書に疑似コードが記載されているので、そちらを見るのが良いでしょう。
ECMAScript® 2021 Language Specification - Array.prototype.push

JavaScript の新しいバージョンで追加された関数等であれば、ポリフィル(古いブラウザなどでも動くように JavaScript コードとして書き直したもの)が存在することもあるので、それらを探すのも良いかもしれません。ただ push のような古くからある関数に関してはポリフィルは基本的に無いです。

Array.prototype.map の例
Array.prototype.map() - JavaScript | MDN

どうしても実際に動いているコードが知りたい、というのであれば、各 JavaScript 実行エンジンのソースコード見ないとわからん、と言う話になります。

Node.js や Chrome は、V8 という JavaScript エンジンで動いているので、github などで一応当該箇所を探すことはできます。

V8 の push 実装
https://github.com/v8/v8/blob/31d2bb8670c248b7d814ed0a9fb689ba0463987b/src/objects/js-array.tq#L215
(リンク先が間違っていたので修正)
https://github.com/v8/v8/blob/dc712da548c7fb433caed56af9a021d964952728/src/builtins/builtins-array-gen.cc#L314

ただしこれらは、C++ や V8 内部実装用の独自言語(Torque)で書かれているので、JavaScript の知識があっても読めませんし、読んでもあまり意味はないかもしれません。

4Like

Your answer might help someone💌