js原型prototype属性用法实例
2017-03-04 20:14 老安的世界 阅读(304) 评论(0) 编辑 收藏 举报//原型方法创建对象的属性和方法,达到共享的目的 function Box(){};//里面什么都没有,如果有就是实例属性和方法 Box.prototype.name='tianwei'; Box.prototype.age='100'; Box.prototype.run=function(){ return this.name+this.age; }; var box1=new Box(); document.write(box1.name);
实例属性不会共享,原型属性共享,优先访问实例属性
//删除属性: delete box1.name; delete Box.prototype.name; //判断属性是否在实例里面: box1.hasOwnProperty('name'); //只要有这个属性就返回true 'name' in box1;
//原型方法创建对象的属性和方法,达到共享的目的 function Box(){};//里面什么都没有,如果有就是实例属性和方法 Box.prototype={ constructor:Box, name:'tianwei', age:'100', run:function(){ return this.name+this.age; } } var box1=new Box(); document.write(box1.constructor);
var box= [1,2,3,2,10,3]; document.write(box.sort()); /*Array.prototype.sort;*/ alert(String.prototype.substr); String.prototype.addString=function(){ return this+'添加成功'; }; var box='4343'; alert(box.addString());
需要独立部分使用构造函数
需要共享部分使用原型模式
//組合構造函數+原型 function Box(name,age){ //需要獨立部分 this.name=name; this.age=age; this.family=['1','2','3']; } Box.prototype={ //共享部分 constructor:Box, run:function(){ return this.name+this.age; } } var box1=new Box('tian',100); box1.family.push('4'); alert(box1.family); var box2=new Box('wei',200); alert(box2.family);
把上面封装在一起,使用
动态原型模式
//組合構造函數+原型 function Box(name, age) { //需要獨立部分 this.name = name; this.age = age; this.family = ['1', '2', '3']; //原型只需要初始化一次 if (typeof this.run != 'function') { Box.prototype.run = function() { return this.name + this.age; } } } var box1 = new Box('aaa', 111); alert(box1.run()); var box2 = new Box('bbb', 222); alert(box2.run());
继承
继承依靠原型链完成
function Box () { this.name='lee'; } function Desk(){ this.age=100; } //new box将Box里的信息交给desk Desk.prototype=new Box(); var desk=new Desk(); alert(desk.name);
组合继承,实例里面通过对象冒充继承,原型里面通过原型链继承
function Box (name,age) { this.name=name; this.age=age; } Box.prototype.run=function(){ return this.name+this.age; } function Desk(name,age){ //对象冒充 Box.call(this,name,age); } Desk.prototype=new Box();//原型链继承 var desk=new Desk('tian',100); alert(desk.run());