导航

javascript prototype学习(一)prototype的用处

Posted on 2012-12-28 10:58  寒宵飞飞  阅读(281)  评论(0编辑  收藏  举报

prototype据我所知,用处主要有两种:

1、prototype属性使您有能力向对象添加属性和方法。 

<script type="text/javascript">
function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}
employee.prototype.salary=20000;
employee.prototype.getName= function()
{
     alert("Name:"+this.name)
};

var bill=new employee("Bill Gates","Engineer",1985);
alert("salary:"+bill.salary);
bill.getName();
</script>

 本例就通过prototype属性向employee这个类中添加了一个属性salary和方法getName(),网页加载后弹出bill的salary和name。

 

2、prototype实现继承

部分转载自http://www.cnblogs.com/goody9807/archive/2007/04/16/715109.html

首先看示例1,使用prototype属性继承了父类的属性a

<script type="text/javascript">
function ClassA()
{
    this.a='a';
}
function ClassB()
{
    this.b='b';
}

ClassB.prototype=new ClassA();
var objB1=new ClassB();
alert(objB1.a);
</script>
ClassB继承了ClassA的属性,网页加载后弹出“a”;

示例2,当父类属性是String,Number和Boolean等简单类型时,子类修改父类的属性,彼此不受影响

当父类属性是Array和Object类型时,子类修改父类的属性,会导致所有继承的子类属性全部发生变化

这是因为对于简单类型,prototype是值拷贝,而对于复杂类型,则是引用地址拷贝。

<script type="text/javascript">
function ClassA()
{
    this.a='a';
    this.array1=[];
}
function ClassB()
{
    this.b='b';
}
ClassB.prototype=new ClassA();
var objB1=new ClassB();
var objB2=new ClassB();
//修改父类string类型
objB1.a='!!!';
alert(objB1.a);
alert(objB2.a);
//修改父类array类型
objB1.array1.push(1,2,3);
alert(objB1.array1);
alert(objB2.array1);
</script>

 网页加载后依次弹出"!!!", “a”, “1,2,3”, “1,2,3”

 objB1和objB2中的array1对象都引用的是classA中的array1对象,因此一个改变,会同步影响另一个。