我试图研究 jQuery 代码,所以我使用了以下代码:
document.write($.constructor);
Jsfiddle
我得到了这样的结果:
function Function() { [native code] }
[native code]是什么意思? 为什么我看不到真正的代码?
[native code]
用 Google-Chrome测试
Google-Chrome
$,jQuery只是一个函数。不调用它,它只是一个普通的函数。函数的构造函数是 Function,因此 $.constructor显示 [native code]。
$
jQuery
Function
$.constructor
当你在直译语言中定义函数时(相对于编译语言)。您可以访问定义函数的文件/string/text。
例如,在 JavaScript 中,您可以读取已定义的函数的定义正文。
如果您尝试通过 JavaScript 构造对 包括函数执行同样的操作,那么它不会以文本形式实现,而是以二进制形式实现。没有理由显示实现该函数的二进制代码,因为它不可读,甚至可能不可用。
JQuery 扩展了默认的 JavaScript 行为。这也是它与 Prototype.js 相比受到高度赞赏和称赞的原因之一。Prototype 是 改变,当使用 Prototype 和其他一些依赖于正常功能的代码一起使用时,JavaScript 的自然行为会造成可能的不一致。
JQuery 扩展了 JavaScript,有一些使用本地代码实现的功能(这在性能方面是一件好事)。
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());
Bind 返回对某种类型的包装代码的引用,或者 toString 考虑绑定副本,因为它不是由用户直接创建的
然而,只要使用 toString ()直接登录函数,就可以打印(在 Chrome 中)原始未绑定函数的源代码:
f = f.bind(a); console.log(f)
ƒ () { /* source code */ }
在 FF 中这不起作用-FF 打印函数对象,w/o 源代码