- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 JavaScript 中,当强制转换为字符串时可以识别原生函数,例如:
console.log(document.getElementById);
// prints "function getElementById() { [native code] }"
但是,任何函数都可以重载 toString()
并伪装成原生函数:
function sum(a, b) {
return a + b;
}
console.log(sum);
// prints "function sum(a, b) { return a + b; }"
sum.toString = function() { return 'function sum() { [native code] }'; };
console.log(sum);
// now prints "function sum() { [native code] }"
我正在查看 Zone.js 的源代码并找到this bit ,它正是这样做的(并且通过设计,according to one of the tests):
class ZoneAwarePromise<R> implements Promise<R> {
static toString() {
return 'function ZoneAwarePromise() { [native code] }';
}
...
现在,我不是要猜测为什么 Zone.js 团队特别选择这样做(我找不到任何官方博客文章/解释),而是:
一般来说,您想在什么时候做这件事?这样做有什么好处吗?
它有任何副作用吗,即 JavaScript 标准或任何 JavaScript 引擎是否以不同方式处理这些函数?
最佳答案
您正在检查的代码特定于 Chromium 引擎和 MS Edge。
function eval() { [native code] }
在 Firefox 和 Safari 中,相同函数的字符串表示形式类似于:
function eval() {
[native code]
}
在 Internet Explorer 中,字符串表示类似,只是字符串的开头和结尾也有换行符。
因此,如果该代码应该伪造一个本地函数,至少它做得不好(或者它可能是 Node 特定的?)。
我不知道这有什么实际用途,除了移植 JSFuck跨浏览器。
确定函数是否为 native 函数的更安全方法是获取 Function.prototype.toString.call(fn)
的结果(其中 fn
是被测试的函数) 并在预期位置搜索字符串 [native code]
。这在所有浏览器中都是不变的,尽管据我所知,它还没有按照规范做到这一点。
关于javascript - 有什么理由让函数假装是原生的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961916/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!