3.字面量
为了让属性和方法很好的体现封装的效果,并且减少不必要的输入原型的创建可以使用字面量.
function Box(){}
//使用字面量的方法创建原型对象,这里的{}就是对象,是Object,new Object就是相当于{}
Box.prototype={
name:'link',
age:23,
run:function(){
return this.name+this.age+'运行中。。。'
}
};
var box=new Box();
alert(box.run());
使用构造函数创建原型对象和使用字面量创建对象在使用上基本相同,但是还是有一些区别,
字面量创建的方式使用constructor属性不会指向实例,而会指向OBject,构造创建的方式则相反。
字面量创建对象
function Box(){}
//使用字面量的方法创建原型对象,这里的{}就是对象,是Object,new Object就是相当于{}
Box.prototype={
name:'link',
age:23,
run:function(){
return this.name+this.age+'运行中。。。'
}
};
var box=new Box();
alert(box.run());
alert(box.constructor) //就是Object方法,因为{}就是对象,是Object,new Object就是相当于{}
构造函数创建原型对象
function Box(){} //构造函数函数体里面就是什么都没有,这里如果有,就叫实例属性,实例方法。
Box.prototype.name='link';
Box.prototype.age='23';
Box.prototype.run=function(){
return this.name+this.age+"运行中。。。"
}
var box=new Box();
alert(box.constructor);//就是Box方法。
如果字面量想Object转换Box可以用
function Box(){}
//使用字面量的方法创建原型对象,这里的{}就是对象,是Object,new Object就是相当于{}
Box.prototype={
constructor:Box, //直接强制指向Box
name:'link',
age:23,
run:function(){
return this.name+this.age+'运行中。。。'
}
};
var box=new Box();
alert(box.run());
alert(box.constructor) //就是Box方法。
原型对象不仅仅可以在自定义对象的情况下使用,而ECMAScript内置的引用类型都可以使用这种方式,并且内置的引用类型本身也使用了原型。
//数组排序
var lis=[1,2,15,5,55,33,0]
alert(lis.sort())
//查看sort是不是Array原型对象里的方法
alert(Array.prototype.sort)
alert(String.prototype.substring)
//添加新方法
String.prototype.addString=function(){
return this+'新方法';
}
var box='link'
//输出link新方法
document.write(box.addString())
PS:尽管给原生的内置引用类型添加方法使用起来很方便,但是我们不推荐使用这种分,因为它可能会导致命名冲突,不利于代码的维护性.