发布时间:2021-05-29 15:10:46 阅读次数:102
因为早期的浏览器只能用于浏览,不具备与访问者交互的能力。例如,如果网页上有一栏“用户名”需要填写,浏览器将无法判断访问者是否真的填写,只能让服务器判断。
如果不填写,服务器会返回错误,要求用户重新填写,既浪费时间又浪费服务器资源。
这时候就需要一种网页脚本语言,它可以完成一些简单的操作,比如判断用户是否填写了表单。此时,面向对象编程是最繁荣的时期。 C++ 是当时最流行的语言,Java 语言也很快推出。
所以 Javascript 作者也受到了启发。 Javascript 中的所有数据类型都是对象,这与 Java 非常相似。但是,直接使用Java的“继承”机制太麻烦了。但是,Javascript 是所有对象,必须有一种机制来连接所有对象。因此,javascript作者最终设计了“继承”。
不过,他并不打算引入“类”的概念,因为一旦有了“类”,Javascript就是一个完整的面向对象的编程语言,显得有些过于正式,增加了初学者的入门难度。 .
他认为C ++和Java语言都使用新命令来生成示例。
C++ 写成:
ClassName *object = new ClassName(param);
Java 写成:
Foo foo =新的Foo();
这时候他就想到C++和Java在使用new命令的时候会调用“类”的构造函数。他做了一个简化的设计。在 Javascript 语言中,new 命令后面不是一个类,而是一个构造函数。
但是很快发现使用构造函数生成实例对象有一个缺点,就是不能共享属性和方法。
每个实例对象都有自己的属性和方法副本。这不仅无法实现数据共享,而且是资源的极大浪费。
最后添加了prototype属性的引入
考虑到这一点,作者决定为构造函数设置一个原型对象属性。
实例对象需要共享的所有属性和方法都放在这个对象中;那些不需要共享的属性和方法放在构造函数中。
一旦实例对象被创建,它会自动引用原型对象的属性和方法。
由于所有实例对象共享同一个原型对象,从外面看,原型对象似乎是实例对象的原型,而实例对象似乎“继承”了原型对象。
JavaScript使用原型编程,所有对象都可以共享原型上的方法,从而节省内存;同时,基于prototype的实现思想,JavaScript通过寻找合适的原型链轻松实现继承。
这是原型设计的两个最大好处!!!