因为早期的浏览器只能用来浏览,不具备与访问者互动的能力。比如网页上有一栏“用户名”需要填写,浏览器就无法判断访问者是否真的填写了,只能让服务器端判断。如果不填写,服务器会返回错误,要求用户重新填写,浪费时间和服务器资源。这时候就需要一种网页脚本语言,它可以完成一些简单的操作,比如判断用户是否填写了表单。恰好此时正是面向对象编程最繁荣的时期。C++是当时最流行的语言,Java语言也推出不久。于是Javascript作者也受到了启发,Javascript中所有的数据类型都是对象(object),这一点和Java很相似。但是直接使用java的“继承”机制太麻烦了。但是,Javascript中有对象,必须有一种机制将所有对象连接起来。因此,javascript作者最终设计了“继承”。不过,他并不打算引入“类”的概念,因为一旦有了“类”,Javascript就是一门完全面向对象的编程语言,显得有些过于正式,增加了初学者的入门难度。他认为C++和Java语言都使用new命令来生成实例。C++是这么写的:ClassName*object=newClassName(param);Java是这样写的:Foofoo=newFoo();这时他想到,C++和Java在使用new命令时,会调用“类”的构造函数(constructor)。他做了一个简化的设计。在Javascript语言中,new命令后跟的不是一个类,而是一个构造函数。但是很快发现使用构造函数生成实例对象有一个缺点,就是属性和方法不能共享。每个实例对象都有自己的属性和方法副本。这样不仅无法实现数据共享,而且是资源的极大浪费。最后添加了原型属性的介绍。考虑到这一点,作者决定为构造函数设置一个原型对象属性。所有实例对象需要共享的属性和方法都放在这个对象中;那些不需要共享的属性和方法放在构造函数中。一旦创建了实例对象,它就会自动引用原型对象的属性和方法。由于所有的实例对象共享同一个原型对象,所以从外部看,原型对象就好像是实例对象的原型,实例对象就好像“继承”了原型对象。面试总结答案JavaScript采用原型编程,所有对象都可以共享原型上的方法,节省内存;同时,基于原型的实现思想,JavaScript通过寻找正确的原型链来方便地实现继承。这就是原型编程带来的两个最大的好处!!!参考资料的内容是最简化的。如需阅读原文总结,请查看阮一峰博客↓http://ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.htmlhttps://blog.csdn.net/daigualu/article/details/54772799这篇文章转载自微信公众号“前端人”,可通过以下二维码关注。转载本文请联系前端达人公众号。
