初学者学习javascript可能会感受很困扰,可是你一旦真正了解了它,我相信你会爱上它。学习ECMAScript,总绕不开原型,原型链,继承等等这些知识。今天把它们放在一起,首先把理解他们做为小目标,构建一个完备的结构。不要眼高手低,咱们一步一步来理解。javascript
1.何为对象?对象是数据,这个数据拥有属性和方法,有能够进行封装和继承等等的特色。
2.何为面向对象编程?面向对象编程是一个使用一系列的对象进行协做,从而灵活高效地解决复杂问题的编程思想。java
建立对象的方法:对象字面量、工厂模式、构造函数模式、原型模式等。
前面三个暂且不看,他们的短板你们应该都知道。主要来看如何用原型模式建立一个对象。编程
来个看烂了的例子,把一个“人”做为对象,尽情地建立吧:闭包
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它也是个对象,它也有本身的原型,原型对象又包含一个指向另外一个原型的指针,相应地,另外一个原型中也包含着一个指向另外一个构造函数
的指针。假如另外一个原型又是另外一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。this
来谈谈继承,继承能够利用构造函数,使用prototype属性等来实现。原型继承主要就是用原型链来实现,怎么个继承法呢?就是利用原型让一个引用类型来继承另外一个引用类型的属性和方法。
记得上面的草图吧,我来画一个好看点的:spa
看到了吗,沿着原型链一环一环的继承。prototype
初学者看到这里相信已经对面向对象编程有关的重要概念有了必定理解,下一篇来谈一谈有关闭包的知识。第一次写文章,文笔太差,也没有高深的技术在里面,若是帮助初学者理清了思路,个人目的就达到了。指针