说实话,一开始我对prototype和property是分不清的,我说的是单词分不清,不知道他们的意思,在强制自己记忆了一遍之后,我是这么记忆的,type(类型),跟“原型”差不多,所以prototype就是原型了,property就是属性了。没办法啊,对于英语差的不好意思说自己学过英语的人,只能这样记忆了,还好这样也记住了。
正文从这里开始吧,说说我对原型模式的理解。
任何一个对象都是有原型的,像Java里类似,Object是所有对象的原型。
先说下JS中的创建对象的几种方式吧
方式一:
var person=new Object();//var person={};
person.name="xiangshuo";
person.age=23;
person.job="fn";
person.sayName=function(){
alert(this.name);
};
方式二(对象字面量):
var person={
name:"xiangshuo",
age:23,
job:"fn",
sayName:function(){
alert(this.name);
}
};
方式三:工厂模式
function createPerson(name,age,job){
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=function(){
alert(this.name);
}
return o;
}
var person1=createPerson("xiangshuo",23,"fn");
方式四:构造函数模式
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function(){
alert(this.name);
}
}
var person1=new Person("xiangshuo",23,"fn");
构造函数创建多个对象的时候,如果对象含有方法,则要创建多个Function实例。
方式五:原型模式
function Person(){
}
Person.pertotype.name="xiangshuo";
Person.pertotype.age=23;
Person.pertotype.job="fn";
Person.pertotype.sayName=function(){
alert(this.name);
};
var person1=new Person();
Person对象上有一个prototype原型属性,原型属性指向他的原型对象,原型对象有构造函数和其他属性,原型对象的构造函数指向了Person对象,person1实例对象有一个[[prototype]]内部原型属性,指向了原型对象。如果通过对象字面量来重写整个原型对象,则会切断原型对象构造函数与对象之间的指向关系(完全重写了prototype),这点需要注意,然后通过重新指向
Person.prototype.constructor=Person;
好了,基本上我对原型的理解就是这样,最主要的还是最后一句话,应该是说明了原型与对象之间的关系。以后再深入理解吧,毕竟这是自己第一次感觉对原型有了一定认识的阅读。