How can I read ‘native code’ JavaScript functions?
The reason Chrome or Firefox says that the code is native is that it really is native - the WebKit and Firefox developers have coded up that functionality in C or C++, not JavaScript. However, if you want to see the actual code, you can look at the source repositories for Chromium and Firefox.
What is `function floor() { [native code] }` in console
You can't do this from the console, because the functions are part of the compiled browser executable … or, rather, its JavaScript engine. It is native code.
You may be able to read the source code for that engine, though, depending on which browser you're using. For example, Chrome's v8 source is on GitHub.
How to get native javascript functions source code?
While this will not show you actual source code, if you're interested in how many of the native JavaScript functions are implemented, you can peruse the specification upon which they are based:
Standard ECMA-262
How to view native source code in browser?
the [native code]
are stored in browser, they are even not JavaScript.
Engine may take control when find()
be called.
Instead, You should Search Array.find shim
In Google.
https://www.google.com/#newwindow=1&safe=off&q=Array.find+shim
What does [native code] mean?
When you define functions in an interpreted language (as opposed to a compiled language). You have access to the file / string / text that defines the function.
In JavaScript for example you can read the definition body text of a function you have defined.
If you try to do the same for a function that is included by construction in JavaScript it is not implemented as text but as binary. There is no reason to show the binary code that implements that function because it is not readable and it might not even be available.
jQuery extends default JavaScript behaviour. It's one of the reasons it was so highly appreciated and praised as opposed to Prototype.js for example. Prototype was altering the natural behaviour of JavaScript creating possible inconsistencies when using Prototype alongside some other piece of code that relied on normal functionality.
tl;dr:
jQuery extends JavaScript, there is functionality implemented using native code (which performance wise is a good thing).
Why does function.toString() output [native code], whereas logging to the console directly displays the function’s source code?
It is because those functions have been passed to Function.prototype.bind
.
> (function () { return 42; }).toString()
'function () { return 42; }'
> (function () { return 42; }).bind(this).toString()
'function () { [native code] }'
The bind
method transforms an arbitrary function object into a so-called bound function. Invoking a bound function has the same effect as invoking the original function, except that the this
parameter and a certain number of initial positional parameters (which may be zero) will have values fixed at the time of the creation of the bound function. Functionally, bind
is mostly equivalent to:
Function.prototype.bind = function (boundThis, ...boundArgs) {
return (...args) => this.call(boundThis, ...boundArgs, ...args);
};
Except that the above will, of course, produce a different value after string conversion. Bound functions are specified to have the same string conversion behaviour as native functions, in accordance with ECMA-262 11th Ed., §19.2.3.5 ¶2:
2. If func is a bound function exotic object or a built-in function object, then return an implementation-dependent String source code representation of func. The representation must have the syntax of a NativeFunction. […]
[…]
NativeFunction:
function PropertyName [~Yield, ~Await] opt ( FormalParameters [~Yield, ~Await] ) { [native code] }
When printing the function to the console directly (instead of the stringification), the implementation is not bound to any specification: it may present the function in the console any way it wishes. Chromium’s console, when asked to print a bound function, simply displays the source code of the original unbound function, as a matter of convenience.
Proving that this is indeed what happens in YouTube’s case is a bit of a nuisance, since YouTube’s JavaScript is obfuscated, but not exceedingly difficult. We can open YouTube’s main site, then enter the developer console and install our trap:
window.setTimeout = ((oldSetTimeout) => {
return function (...args) {
if (/native code/.test(String(args[0])))
debugger;
return oldSetTimeout.call(this, ...args);
};
})(window.setTimeout);
We should get a hit at the debugger
statement very quickly. I hit it in this function:
g.mh = function(a, b, c) {
if ("function" === typeof a)
c && (a = (0, g.D)(a, c));
else if (a && "function" == typeof a.handleEvent)
a = (0, g.D)(a.handleEvent, a);
else
throw Error("Invalid listener argument");
return 2147483647 < Number(b) ? -1 : g.C.setTimeout(a, b || 0)
}
The g.D
function looks particularly interesting: it seems to be invoked with the first argument a
, which is presumably a function. It looks like it might invoke bind
under the hood. When I ask the console to inspect it, I get this:
> String(g.D)
"function(a,b,c){return a.call.apply(a.bind,arguments)}"
So while the process is a bit convoluted, we can clearly see that this is indeed what happens.
Related Topics
Filling Empty Cells in CSS Grid Layout
Inherited CSS Values via JavaScript
Download JSON Object as a File from Browser
How to Reload Page Every 5 Seconds
How Can a JavaScript Object Refer to Values in Itself
Changed Id Not Being Found by Jquery
Detect Inside Android Browser or Webview
Removing Address Bar from Browser (To View on Android)
How to Open an External Link in Safari Not the App's Uiwebview
What Are the Common Defenses Against Xss
Confusion About Node.Js Internal Asynchronous I/O Mechanism
How to Declare Hash.New(0) with 0 Default Value for Counting Objects in JavaScript
How to Update/Upsert a Document in Mongoose
Why Doesn't JavaScript Support Multithreading
Convert Special Characters to HTML in JavaScript
Restart a Gif Animation Without Reloading the File
Show Dynamically Added Navlinks When Added in Bootstrap Navbar