原型对象prototype是Object或与之同等级的对象如(function,Number)的一个属性,protorype是个对象。typeof的值是object。

如果看了上一小节的最后一个例子,对自定义的“类”应该比较熟悉了。
在javascript中,可以说没有方法,因为函数和字符串一样也是种数据类型,但类中的函数可以用this关键字。下面我说的类的属性可以是方法,也可以指字段。
在一个自定义“类”中有中有几个地方可以定义属性。
   a、函数名中直接定义。  如Person.name。在这定义相当于类名的属性。静态的,访问的时候必须用Person.name来访问,不能用new Person().name访问,也访问不到。
   b、构造函数的this.中。当你用new function()时,这些属性就是你所持对象的属性。用new Person().属性  来访问。
   c、构建好对象以后,给对象增加属性。和构造函数中的属性使用类似。
   d、函数名的prototype中
   e、父类或Object 的prototype中。

(1)对象属性优先级
通过运行以下代码,我们访问对象属性优先级如下:c>b>d>e
c种属性必须在定义以后访问才有效。a种属性实例访问不到。
javascrpt语言预定义的属性不能用for in 得到。如toString

<SCRIPT LANGUAGE = "JavaScript"> 
<!-- 
 Object.prototype.toString 
= function ()  {} ;
Object.prototype.name 
= " Object " ;
Object.prototype.porotype_name 
= " oObject " ;
Object.prototype.parent_name 
= " pObject " ;

Person.prototype.name 
= " Person " ;
Person.prototype.porotype_name 
= " oPerson " ;
 function  Person()  
{
     
this .name = 'Person实例';
}
 
 var  o 
= new  Person();
 
for ( var  key  in  o)  {
    alert(key 
+ ':' + o[key]);
}
 
// --> 
</ SCRIPT > 

(2)prototype属性是只读的
看如下代码,你不要试图通过变量改变原型对象的属性。你也不可能改变,你只会通过c模式给对象增加一个属性。
另外原型对象是所有实例共享的。理论上也不可以改变。

<SCRIPT LANGUAGE ="JavaScript"> 
<!-- 
Person.prototype.name 
= " Person " ;
 function  Person()  
{
  
}
 
 var  o 
= new  Person();
 var  o1 
= new  Person();
alert(
'o.name:' + o.name + '  ' + 'o1.name:' + o1.name);
o.name 
= 'zkj';
alert(
'o.name:' + o.name + '  ' + 'o1.name:' + o1.name);
// --> 
</SCRIPT>