通过上一篇文章可以看出在js中可以使用函数来模拟类,这也是js中的面向对象为什么不是纯粹的面相对象而是基于面相对象。那在学习js面相对象之前还需要了解关于js函数中的prototype和constructor这两个属性或者对象。其中prototype就是js中有名的原型,而constructor就是指向对象的构造函数。
首先看如下代码:
<script type="text/javascript">
function Person(name, age) {
//私有属性
var verson = '1.1.0';
//公有属性
this.name = name;
this.age = age;
//公有方法
this.say = function() {
alert( "I'm " + this.name );
};
this.getverson = function() {
alert( verson );
};
}
var p = new Person('koma', 21);
alert( Person.prototype ); //Object
alert( Person.prototype.constructor ); //function Person(name, age) {...
alert( p.constructor ); //function Person(name, age) {...
</script>
那需要了解到的一点就是js中的函数默认都有一个prototype属性,通过函数实例化出来的对象(p)都默认有一个属性constructor。
其中函数的prototype属性指向一个prototype对象,这个prototype对象同时也含有一个默认的constructor属性,这个constructor属性指向的东西和通过函数实例化出来的对象(p)的constructor属性指向的内容一样都是指向这个对象的“构造函数”也就是Person。
那上面这种关系通过画图来展示出来之后就形成了js中的原型链。如下图:
通过上面的图再加上一些理解和认识之后就对于js的原型链和js的prototype有了一些认识,那有了这些准备知识之后就可以掌握好js的面向对象编程了吗?不是的,js中面相对象编程的准备知识还不止这些,还需要了解的知识包括:this、new操作符、闭包。当准备好这些之后我们的js面相对象编程才算是真正的开始。那等下篇文章再介绍这些吧。但是对于js的原型链还是需要一定的时间去理解和沉淀的。