rob*_*bmj 5 javascript typeof instanceof
我正在编写一个函数,true如果传递给它的参数是JavaScript Map的实例,则返回该函数.
你可能已经猜到了typeof new Map()返回字符串object,我们没有得到一个方便的Map.isMap方法.
这是我到目前为止:
function isMap(v) {
return typeof Map !== 'undefined' &&
// gaurd for maps that were created in another window context
Map.prototype.toString.call(v) === '[object Map]' ||
// gaurd against toString being overridden
v instanceof Map;
}
(function test() {
const map = new Map();
write(isMap(map));
Map.prototype.toString = function myToString() {
return 'something else';
};
write(isMap(map));
}());
function write(value) {
document.write(`${value}<br />`);
}Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但是当测试帧之间的映射以及何时toString()被覆盖时,isMap失败(我明白为什么).
例如:
<iframe id="testFrame"></iframe>
<script>
const testWindow = document.querySelector('#testFrame').contentWindow;
// false when toString is overridden
write(isMap(new testWindow.Map()));
</script>
Run Code Online (Sandbox Code Playgroud)
有没有办法编写isMap函数,以便true
在toString重写它们并且map对象来自另一个框架时它将返回?
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |