chromeのコンソールで関数の成り立ちが見たい
pushメソッドの中身はどうなっているのか知りたくてコンソールでArray.prototype.pushと入れてもpushの中身が出てきません。どうすれば見れますか?
sub.js:1 ƒ push() { [native code] }
pushメソッドの中身はどうなっているのか知りたくてコンソールでArray.prototype.pushと入れてもpushの中身が出てきません。どうすれば見れますか?
sub.js:1 ƒ push() { [native code] }
関数の中身が [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 の知識があっても読めませんし、読んでもあまり意味はないかもしれません。