Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

捣乱的 Symbol.hasInstance

  在 ES5 时代,要判断一个元素是否属于某个构造器的实例可以使用 instanceof。因为当时它的定义就是从对象的原型链中找构造器的原型对象。然而 ES6 之后把这个过程开放出来了,在 Symbol 对象上提供了 hasInstance 的东西。于是我们可以造出一些奇奇怪怪的对象。
  我们可以造出一个无论什么对象 instanceof 都为 true 的东西 class Any { static [Symbol.hasInstance]() { return true; } } 1 instanceof Any; // true Object.create(null) instanceof Any; // true   所以 ES6 时代就不能再相信 instanceof 了,如果非要做使用原始的判断方式应该去调动默认的 Symbol.hasInstance
class Any { static [Symbol.hasInstance]() { return true; } } ({}) instanceof Any; // true Object[Symbol.hasInstance].call(Any, {}); // false   虽然 Symbol.hasInstance 可以让对象化更加灵活,但对以前的规范是一种冲击,我觉得这是一个「捣乱」的特性。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^