日期:2014-05-16  浏览次数:20475 次

【转载】JavaScript原型对象

转载地址:http://www.iteye.com/topic/1128242

什么是原型对象?

? ? ? “我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。”

? ? ? --摘自人民邮电出版社出版的Nicholas C.Zakas著的《JavaScript高级程序设计》(第2版)

? ? ? 上面提到的对象,就是原型对象,它的用途是“包含可以由特定类型的所有实例共享的属性和方法”。那么怎么才能访问到它呢?按照上面的说法,每个函数都有一个prototype?指针,这个指针指向了它的原型对象,所以我们可以通过函数的prototype属性来访问函数的原型对象。

? ? ? 下面用程序来说明。

?

Java代码 复制代码?收藏代码
  1. function?SuperType(){} ??
  2. ? ??
  3. document.write(SuperType.prototype);//[object?Object]??
function SuperType(){}
 
document.write(SuperType.prototype);//[object Object]

?

? ? ? 可见函数SuperType的确存在一个prototype属性,其的确是指向了一个对象。但这个对象真是原型对象吗?怎么证明?上面不是说原型对象的用途是“包含可以由特定类型的所有实例共享的属性和方法”,既然如此,那我们就来看这个对象是不是真的有这个功能。

?

Java代码 复制代码?收藏代码
  1. function?SuperType(){} ??
  2. ?????? ??
  3. ?SuperType.prototype.name?=?'Sam';//在SuperType.prototype指向的对象上增加了name属性 ??
  4. ???? ??
  5. ?//在SuperType.prototype指向的对象上增加了sayName方法 ??
  6. ?SuperType.prototype.sayName?=?function()?{ ??
  7. ??????????document.write(this.name); ??
  8. ?}; ??
  9. ?SuperType.prototype.setName?=?function(name)?{ ??
  10. ??????????SuperType.prototype.name?=?name; ??
  11. ?}; ??
  12. ???? ??
  13. ?var?instance1?=?new?SuperType(); ??
  14. ?var?instance2?=?new?SuperType(); ??
  15. ???? ??
  16. ?instance1.sayName();//Sam ??
  17. ?instance2.sayName();//Sam ??
  18. ???? ??
  19. ?instance1.setName('Luce'); ??
  20. ????? ??
  21. ?instance1.sayName();//Luce ??
  22. ?instance