MDN为没有本机绑定方法的浏览器指定了polyfill绑定方法:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
此代码包含以下行:
aArgs.concat(Array.prototype.slice.call(arguments))
Run Code Online (Sandbox Code Playgroud)
哪个作为args传递给函数的apply方法:
fToBind.apply(this instanceof fNOP && oThis
? this
: oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
Run Code Online (Sandbox Code Playgroud)
但是,这一行实际上重复了参数,所以如果我将bind方法调用为:
fnX.bind({value: 666}, 1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
传递给fnX的参数是:
[1, 2, 3, Object, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
运行以下示例并查看控制台输出http://jsfiddle.net/dtbkq/
然而,fnX报告的参数是[1,2,3],这是正确的.有人可以解释为什么传递给apply调用时args是重复的但是没有出现在函数arguments变量中?
如何使用 node.js 作为 Web 服务器来监控每个域的带宽使用情况?
有谁知道我没有遇到过的 API 调用?
或者其他人在按带宽收费的多租户环境中使用的模块或其他方法?
更新:
有谁知道轻量级代理/服务器可以放在任何可以通过检查域记录这些带宽统计信息的 Web 服务器(node.js、apache 等)之前?
在浏览器中运行javascript时,无需尝试隐藏功能代码,因为它已下载并可以在源代码中查看。
在服务器上运行时,情况会改变。在诸如api这样的用例中,您想为用户提供要调用的函数,而又不允许他们查看正在运行的代码。
在我们的特定情况下,我们想在节点内部执行用户提交的javascript。我们能够对node.js api进行沙箱化,但是我们希望将自己的api添加到此沙箱中,而用户则无法toString函数来查看正在运行的代码。
是否有人有一种模式或一种防止用户输出功能代码的方法?
更新:
这是基于以下公认答案的完整解决方案(我相信)。请注意,尽管已使用客户端代码进行了演示。您不会使用此客户端,因为有人可以通过简单地阅读下载的代码来看到隐藏功能的内容(尽管如果使用了缩小功能,它可能会稍微慢一些来检查代码)。
这是供服务器端使用的,您要允许用户在沙盒环境中运行api代码,但不允许他们查看api的功能。这段代码中的沙箱仅用于说明这一点。这不是实际的沙箱实现。
// function which hides another function by returning an anonymous
// function which calls the hidden function (ie. places the hidden
// function in a closure to enable access when the wraped function is passed to the sandbox)
function wrapFunc(funcToHide) {
var shownFunc = function() {
funcToHide();
};
return shownFunc;
}
// function whose contents you want to hide
function secretFunc() {
alert('hello');
}
// api object (will be passed …Run Code Online (Sandbox Code Playgroud) node.js ×2
api ×1
apply ×1
bandwidth ×1
bind ×1
function ×1
javascript ×1
limit ×1
monitoring ×1
tostring ×1