2014-10-10 196 views
0

如何查看函數concat內部的代碼?它如何做它的作用?有沒有人有代碼的副本或在瀏覽器控制檯中查看它的方法?Array.prototype.concat()隱藏內容

console.dir不給我過去

console.dir(Array.prototype.concat); 
function concat() { [native code] } 
arguments: null 
caller: null 
length: 1 
name: "concat" 
__proto__: function Empty() {} 
<function scope> 

我不能或不知道如何檢查該存取但必須有鑽研JavaScript函數

+0

確實有:瀏覽你正在使用的任何引擎的C++代碼。 (如果你的JS引擎沒有發佈它的源代碼,那你的運氣不好。) – apsillers 2014-10-10 12:47:23

+1

[Read JavaScript native code]可能的重複(http://stackoverflow.com/questions/9103336/read-javascript-native-code ) – apsillers 2014-10-10 12:49:41

+2

要狹隘地嘗試在你的具體問題的答案,這裏是Chromium的'concat'的實現:https://code.google.com/p/chromium/codesearch#chromium/src/v8/src/array.js&sq=package:鉻&l = 473(ArrayConcatJS'在第1519行的'InstallFunctions'調用中成爲'Array.prototype.concat') – apsillers 2014-10-10 13:01:19

回答

1

Array而來的方式使用JavaScript,所以它取決於你的JavaScript引擎是如何實現的。 JS引擎可以自由地以任何方式實現它。有可能它沒有使用JavaScript,因爲它可能太慢或者可能無法實現,因爲您需要一個JavaScript引擎,其中包含您要實現它的功能(see bootstrapping)。

在大多數瀏覽器中,代碼JavaScript函數都是用C/C++實現的。以下是來自Chrome /鉻系列瀏覽器的源的例子:https://code.google.com/p/chromium/codesearch#chromium/src/v8/src/array.js&sq=package:chromium&l=473

ArrayConcatJS成爲Array.prototype.concatInstallFunctions呼叫線1519和榮譽爲這個去apsillers

Array.concatRhino engine可以在這裏找到:https://github.com/mozilla/rhino/blob/master/src/org/mozilla/javascript/NativeArray.java在方法js_concat()(如1322)。