Javascript基础——详解prototype

1.6. 关于prototype

prototype即原型。JavaScript中所有的函数都有一个prototype属性。这个prototype属性本身又是一个object类型的对象。因此我们可以对这个prototype对象添加任意属性和方法。prototype的特点是:在prototype上定义的属性和方法,可以通过其构造出来的实例对象直接访问和调用。也就是说,prototype提供了一组同类对象共享属性和方法的机制。下面给出两个例子进行对比说明prototype的作用。

例子1:

function Person(name){

this.name = name;

}

Person.say = function(){

alert('hello,'+this.name);

}

Person.say();//输出“hello,undefined”

var zhangsan = new Person('zhangsan');

var lisi = new Person('lisi');

zhangsan.say();//此处会抛出“对象不支持此属性和方法”的错误

lisi.say();//此处会抛出“对象不支持此属性和方法”的错误

通过例子1可以看出,虽然我们为Person函数定义了名称为say方法,但是只有Person函数自己可以调用该方法,通过Person函数构造出来的zhangsan和lisi两个对象都不能调用该方法,也就是说Person构造出来的对象是不能共享Person函数的属性和方法的。

例子2:

function Person(name){

this.name = name;

}

Person.prototype.say = function(){

alert('hello,'+this.name);

}

Person.say();//此处会抛出“对象不支持此属性和方法”的错误

Person. prototype .say();//输出“hello,undefined”

var zhangsan = new Person('zhangsan');

var lisi = new Person('lisi');

zhangsan.say();//输出“hello,zhangsan”

lisi.say();//输出“hello,lisi”

通过例子2可以看出,我们在Person函数的prototype属性上定义的say方法,通过Person函数构造出来的zhangsan和lisi两个对象都可以调用该方法,也就是说Person构造出来的对象是可以共享Person函数在prototype属性上定义的属性和方法的。但是,Person函数自身却不能直接调用该方法,因此在调用Person.say()时会报错,只能通过Person. prototype .say()进行调用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值