初学者学习javascript可能会感觉很困扰,但是你一旦真正了解了它,我相信你会爱上它。学习ECMAScript,总绕不开原型,原型链,继承等等这些知识。今天把它们放在一块儿,首先把理解他们作为小目标,构建一个完备的结构。不要眼高手低,我们一步一步来理解。
从对象的开始
1.何为对象?对象是数据,这个数据拥有属性和方法,有可以进行封装和继承等等的特点。
2.何为面向对象编程?面向对象编程是一个使用一系列的对象进行协作,从而灵活高效地解决复杂问题的编程思想。
对象那么好,怎么才能找一个(呸,其实是创建)?
创建对象的方法:对象字面量、工厂模式、构造函数模式、原型模式等。
前面三个暂且不看,他们的短板大家应该都知道。主要来看如何用原型模式创建一个对象。
来个看烂了的例子,把一个“人”作为对象,尽情地创建吧:
function Person(){
}
Person.prototype.name = "程流流";//是的,我的名字
Person.prototype.age = 21;
Person.prototype.job = "大学生";
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person();
person1.sayName(); //"程流流"
var person2 = new Person();
person2.sayName(); //"程流流"
alert(person1.sayName == person2.sayName); //true
例子虽然简单,但是内容丰富,来解剖一下:
这个例子里面有构造函数,原型对象,实例对象, prototype
属性,constructor属性,_proto_属性,很丰富吧。关于他们之间的关系,我学习的时候很容易弄混掉(因为我大脑不够聪慧,这个没办法),但是有天上课的时候突然就想明白了,然后就写在了书上。看图:
是不是很简单,明白了他们都是什么以及之间的关系后我们进行到下一步...
原型链
原型链是一条链。我们前面利用构造器(就是constructor)创建了新对象,新对象都有prototype属性,而我们new出来的新实例对象有默认的一个只想构造器原型(原型对象)的内部指针_proto_,那个原型prototype它也是个对象,它也有自己的原型,原型对象又包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数
的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。
原型链有什么用
来谈谈继承,继承可以利用构造函数,使用prototype属性等来实现。原型继承主要就是用原型链来实现,怎么个继承法呢?就是利用原型让一个引用类型来继承另一个引用类型的属性和方法。
记得上面的草图吧,我来画一个好看点的:
看到了吗,沿着原型链一环一环的继承。
初学者看到这里相信已经对面向对象编程有关的重要概念有了一定理解,下一篇来谈一谈有关闭包的知识。第一次写文章,文笔太差,也没有高深的技术在里面,如果帮助初学者理清了思路,我的目的就达到了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。