1.首先让我们一起来学习JS的一个重要属性"prototype",这个属性就是方法的原型,保存它们所有实例方法的真实存在。
2.每个函数都包含两个非继承而来的方法:apply()和call()用在特定的作用域调用函数,实际上等于设置函数体内this对象的值。扩展函数的使用域。
3.ECMAScript(欧洲计算机制造商协会) 定义类或对象,它们给出了定义类的多种方法,有工厂方法、构造函数方法、原型方法、构造函数/原型方法的结合、动态原型方法。
其中,工厂方法:它们的每一个实例的属性值、函数是完全一样的。这样不符合OOP设计,在OOP我们设计的类应该是对某一类事物的抽象。实例化之后%99是各有不同的。
构造函数方法:为每个对象独立创建相同的函数版本(函数是对数据的操作),这样会造成空间的浪费,没有达到函数共享(所以,当我们写一个类时(c++/java),我们不应该局限于我们只使用该类创建一个对象,而应思考若我使用该类创建多个对象,那么,该类的数据和方法是否实现共享或是多个对象是否创建了多个相同的方法(函数)。在JS中,我们使用prototype实现了函数共享。在C++/JAVA中可以用静态函数实现,但是使用静态函数的时候也应该注意,静态函数在运行程序时就加载到内存中,而对象则在实例化时才会加载到内存中,写一个类时应该多思考思考)。
原型方法:实现了函数共享,但是缺少了对属性值的初始化。
构造函数/原型方法:完美的解决了以上各种方法的问题。
但是开发者认为还不够好,所以,又出现了动态原型方法(这个就和我们所学的C++/JAVA有点类似了)。
继承和组合:
(待整理中............)