代码改变世界

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());