Web 技术研究所

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

一个名叫 constructor 的方法

  在 class 的定义中,constructor 是一个特殊的名称,就和定义对象时的 __proto__ 属性一样的存在,它是单独处理的。如果我们需要一个名为 constructor 的方法,但又不希望它作为构造函数(虽然不建议这么玩,但这是使用 ES5 那套原型继承很容易实现的),那应该怎么办呢?
  和 __proto__ 的情况一样,constructor 是预处理的结果。如果属性是使用中括号括起来的计算结果作为属性名,那它就不会被预处理。所以我们可以这样定义一个名为 constructor 的方法,而不被预处理捕获:
<script> var a = new class { ['constructor']() { console.log(123); } }; a.constructor(); // 123 </script>   甚至可以同时甚至一个作为构造器的 constructor 和一个作为方法的 constructor,它们并不冲突:
<script> var a = new class { constructor() { console.log(123); } ['constructor']() { console.log(456); } }; // 123 a.constructor(); //456 </script>   虽然规范没有强制要求,但是很多开发者都会认为从对象的 constructor 可以获取到对象的构造器。为了避免其它开发者的误解和浪费调试的时间,使用 constructor 这个名称作为其它用途的做法我是非常反对的。这篇文章的用意是让大家了解 class 对 constructor 这个属性的解析方式,谁要作死千万别说是我教的。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^