对象系统的继承特性,三种实现方案
1.基于类
2.基于原型
3.基于元类
高级语言采用基于类,js采用基于原型
javascript中没有类只有对象,而是采用"constructor(构造器,构造函数)"的机制来实现类的某些功能
所用的名词:原型,构造器,原型链,new,prototype属性,constructor属性
构造器与函数
//构造器的原型 //函数体
function myObject() function myObject()
{ {
prototype=new object();
} }
//构造器 myObject() //函数 myObject()
函数与构造器并没有明显的界限,其中的唯一区别,只是在于原型prototype是不是一个有意义的值
构造器的用法
function myObject()
{
var id=1; //表示私有变量不被继承
this.name="今晚在线"; //将会被新创建的实例对象所继承
}
new 命令后面跟的不是类,而是构造函数。用来从原型对象生成一个实例对象
var obj =new myObject();
obj是实例对象,myObject()是构造函数(原型对象)
constructor属性
该属性默认总是指向该构造函数
prototype属性
每个构造函数都有一个prototype属性,但实例对象没有
<script type="text/javascript">
function myObject(){
}
var obj = new myObject();
alert(obj.prototype=== obj.constructor.prototype); //false
alert(obj.prototype) //undefinded
alert(obj.constructor.prototype) //object
</script>
上述代码可见是实例对象是没有prototype属性的
参考
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
<<javascript 语言精髓与编程实践>>(第二版) 周爱民著