【问题标题】:What does " [native code] " mean?“[本机代码]”是什么意思?
【发布时间】:2012-06-29 09:13:14
【问题描述】:

我试图研究 jQuery 代码,所以我使用了这个:

document.write($.constructor);

jsfiddle

我得到了这个结果:

function Function() { [native code] }

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

Google-Chrome 测试

【问题讨论】:

  • @RobW。嗯,确实如此,但我仍然不明白为什么我会得到这个值? jQuery ctor 怎么能不在 js 中? (知道constructor 是 js 与其他所有语言都不一样)源代码中没有 C\C++...
  • 它正在返回一个函数。在 alert() 中查看它
  • @AlexW。就像我的问题说的......?!
  • 可能constructor方法继承自JS对象,这是浏览器基本功能的一部分。

标签: javascript jquery native-code


【解决方案1】:

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

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

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

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

tl;博士:

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

【讨论】:

  • 这个答案很好地解释了[native code]的奥秘。谢谢。
  • “包含在构造中”是什么意思?
  • @doubleOrt 我认为他指的是引擎
  • @Mihai Stancu 你能解释一下“包含在构造中”的部分吗?
【解决方案2】:

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

【讨论】:

  • 可以肯定的是,它与jQuery完全没有关系,另一个答案让我感到困惑。
  • @gdoron jQuery 在这种情况下是无关紧要的。
  • @RobW 我有这段代码 jQuery.colorbox.close() 以及如何在原生 javascript 中转换
【解决方案3】:

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 打印函数对象,没有源代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2016-03-28
    相关资源
    最近更新 更多