Javascript基础——详解prototype

来源:互联网 发布:愉此一生网络剧播放 编辑:程序博客网 时间:2024/06/16 01:18

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()进行调用。

原创粉丝点击