Web 技术研究所

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

覆写prototype和修改prototype的区别

  构造器的prototype对象操作可以分为两种,一种是直接对其重新赋值,另一种是对其的属性做修改。这两种操作方式是有很大区别的,前者会导致在这个操作之前实例化的对象无法连接到新的prototype,后者的操作则不管是否是已经存在的实例都一律生效。
<script>
var F=function(){};
var f1=new F;
F.prototype={
  name:"F"
};
var f2=new F;
console.log([f1.name,f2.name]); //[undefined,"F"]
</script>
  因为f1对象的[[Prototype]]内置属性是F构造器最初的prototype属性,后面修改F构造器的prototype属性也不会影响到已创建对象的[[Prototype]]内置属性,所以f1.name就是undefined。如果我们使用修改稿prototype的方式就可以得到完全不同的结果。
<script>
var F=function(){};
var f1=new F;
F.prototype.name="F";
var f2=new F;
console.log([f1.name,f2.name]); //["F","F"]
</script>
  这里F的prototype属性和f1的[[Prototype]]指的实际山是同一个对象,所以在F的prototype上做的操作同样也可以从实例的[[Prototype]]上访问到,因此这里f1和f2都有name属性。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^