有两种方式可以扩展原型,不管哪种方式都会对原型所在的原型链产生影响。
(1)属性扩展
对构造函数的原型进行属性扩展后,扩展结果对继承此原型的对象都有效。
通常,用在扩展ECMAScript对象的功能,例如ECMAScript中的字符串类型,都没有trim()(去掉字符串中的空格)方法,而通过原型的扩展功能,就可以给ECMAScript中的字符串都扩展此功能,例如:
String.prototype.trim=function(){
//逻辑处理
}
然后就可以像这样使用:
" a b ".trim();
(2)对象赋值
当用户进行自定义类的扩展时,最直接、最简单的方法就是直接对构造函数的原型进行赋值,例如:
String.prototype=Object.prototype;
这样,String类就完全继承了Object类中的所有属性,但很遗憾,这个例子无法运行,因为所有的内置对象的prototype属性都有只读属性。