我试图调查 jQuery 代码,所以我使用了这个:
document.write($.constructor);
我得到了这个结果:
function Function() { [native code] }
是什么[native code]
意思?为什么我看不到真正的代码?
经测试Google-Chrome
我试图调查 jQuery 代码,所以我使用了这个:
document.write($.constructor);
我得到了这个结果:
function Function() { [native code] }
是什么[native code]
意思?为什么我看不到真正的代码?
经测试Google-Chrome
当您在解释语言(而不是编译语言)中定义函数时。您可以访问定义函数的文件/字符串/文本。
例如,在 JavaScript 中,您可以读取已定义函数的定义正文。
如果您尝试对JavaScript 构造中包含的函数执行相同操作,则它不会以文本形式实现,而是以二进制形式实现。没有理由显示实现该功能的二进制代码,因为它不可读,甚至可能不可用。
jQuery 扩展了默认的 JavaScript 行为。这是它受到高度赞赏和赞扬的原因之一,而不是例如 Prototype.js。Prototype改变了 JavaScript 的自然行为,在将 Prototype 与其他一些依赖于正常功能的代码一起使用时,可能会产生不一致。
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 打印函数对象,没有源代码