发表于: 2016-08-14 16:08:14
2 2201
今天完成的事情:今天看了一波js
明天计划的事情:明天看js基础
遇到的问题:无
收获:
基于类的关键概念
因此,我们有如下关键概念:
创建一个对象之前,必须声明类,首先有必要界定其类
因此,该对象将由抽象成自身“象形和相似性”(结构和行为)的类里创建
方法是通过了严格的,直接的,一成不变的继承链来处理
子类包含了继承链中所有的属性(即使其中的某些属性是子类不需要的);
创建类实例,类不能(因为静态模型)来改变其实例的特征(属性或方法);
实例(因为严格的静态模型)除了有该实例所对应类里声明的行为和属性以外,是不能额外的行为或属性的。
让我们看看在JavaScript里如何替代OOP模型,也就是我们所建议的基于原型的OOP。
基于原型
这里的基本概念是动态可变对象。转换(完整转换,不仅包括值,还包括特性)和动态语言有直接关系。下面这样的对象可以独立存储他们所有的特性(属性,方法)而不需要的类。
object = {a: 10, b: 20, c: 30, method: fn};
object.a; // 10
object.c; // 30
object.method();
此外,由于动态的,他们可以很容易地改变(添加,删除,修改)自己的特性:
object.method5 = function () {...}; // 添加新方法
object.d = 40; // 添加新属性 "d"
delete object.c; // 删除属性 "с"
object.a = 100; // 修改属性 "а"
// 结果是: object: {a: 100, b: 20, d: 40, method: fn, method5: fn};
也就是说,在赋值的时候,如果某些特性不存在,则创建它并且将赋值与它进行初始化,如果它存在,就只是更新。
在这种情况下,代码重用不是通过扩展类来实现的,(请注意,我们没有说类没办法改变,因为这里根本没有类的概念),而是通过原型来实现的。
原型是一个对象,它是用来作为其他对象的原始copy,或者如果一些对象没有自己的必要特性,原型可以作为这些对象的一个委托而当成辅助对象。
评论