繁体   English   中英

“[本机代码]”是什么意思?

[英]What does " [native code] " mean?

我试图调查 jQuery 代码,所以我使用了这个:

document.write($.constructor);

提琴手

我得到了这个结果:

function Function() { [native code] }

[native code]是什么意思? 为什么我看不到真正的代码?

Google-Chrome测试

当您用解释语言(而不是编译语言)定义函数时。 您可以访问定义函数的文件/字符串/文本。

例如,在 JavaScript 中,您可以读取已定义函数的定义正文文本。

如果您尝试对 JavaScript 中通过构造包含的函数执行相同操作,则它不会以文本形式实现,而是以二进制形式实现。 没有理由显示实现该功能的二进制代码,因为它不可读,甚至可能不可用。

jQuery 扩展了默认的 JavaScript 行为。 例如,这就是它与 Prototype.js 相比受到高度赞赏和赞扬的原因之一。 Prototype 正在改变JavaScript 的自然行为,当将 Prototype 与其他一些依赖于正常功能的代码一起使用时,可能会产生不一致的情况。

tl;博士:

jQuery 扩展了 JavaScript,使用本机代码实现了一些功能(这在性能方面是一件好事)。

$jQuery只是一个函数。 不调用它,它只是一个普通的函数。 函数的构造函数是Function ,因此$.constructor显示[native code]

bind 对函数执行此操作:

 var f = function() { /* source code */ }; console.log(f.toString());
function () { /* source code */ }
 var a = {}; f = f.bind(a); console.log(f.toString());
function () { [native code] }
 f = new Function('/* source code */'); console.log(f.toString());
function anonymous() { /* source code */ }
 f = f.bind(a); console.log(f.toString());
function () { [native code] }

bind 返回对某种包装器代码的引用,或者 toString 认为绑定副本是本机的,因为它不是由用户直接创建的

但是,直接记录函数,不使用 toString(),打印(在 Chrome 中)原始未绑定函数的源代码:

 f = f.bind(a); console.log(f)
ƒ () { /* source code */ }

在 FF 中,这不起作用 - FF 打印函数对象,没有源代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM