Web 技术研究所

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

静态属性继承与 function 原型链

  在 ES6 的 class 上,静态属性也是可以继承的。以前 ES5 时代我用的几乎都是普通的对象继承,对于函数本身的继承从来没尝试过。在 ES5 中,我们只能使用 Object.create 来基于一个原型对象创建一个对象,但无法创建一个函数。所以 ES5 中我们似乎无法实现函数继承。
  ES6 使用 extends 关键字继承的 class 会把静态属性也继承过去,比如:
<script> class A { static print(text) { document.write(text); } } class B extends A {} B.print('hehe'); // hehe </script>   也就是说,它把函数的 [[Prototype]] 内部属性也修改了
<script> class A {} class B extends A {} document.write(B.__proto__ === A); // true </script>   或者即便不是 class extends,我们也可以通过 __proto__ 或 setPrototypeOf 等方式手动修改函数的 [[Prototype]] 内部属性来达到这个效果
<script> var A = function() {}; A.print = function(text) { document.write(text); }; var B = function() {}; Object.setPrototypeOf(B, A); B.print('hehe'); // hehe </script>   但是 ES5 确实没有这么玩的 Object.create 始终返回一个对象而不是函数,即便它继承自 Function。
<script> var f = Object.create(function() {}); document.write(f instanceof Function); // true try { f(); } catch(e) { alert(e.message); // f is not a function } </script>   或许是不是应该有一个 Function.create 呢?
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^