javascript是面向对象的语言,而面向对象的特点是:继承、封装、多态。
而javascript中的继承不是真正意义上的继承,他不想java语言那样有extends关键字表示类的继承。
javascript中的继承方式是把你要继承的对象中的属性和方法拷贝到对象中来。
我所了解和使用过的有以下几种:'
function Person(){
this.name="张三";
this.age="男";
this.sex=232;
}
Person.prototype.show=function(){
alert(this.name+','+this.age+','+this.sex);
}
第一种:
function Stu(){
this.aa=Person;
this.aa();
delete this.aa;
}
var s=new Stu();
alert(s.name);//张三
其实就是把Person函数赋给Stu中的一个变量aa,然后在Stu函数中执行aa(Person),这时对象中的this指向就是Stu。最后在删除该变量。
第二种:
function Stu1(){
Person.call(this);
}
var s=new Stu1();
alert(s.name);//张三
第三种:
function Stu2(){
Person.apply(this);
}
var s=new Stu2();
alert(s.name);
第二种方式和第三种方式本质都是差不多的,调用函数传入调用函数中this指向的对象(call和apply的用法已在前面说过,这里就不多说了)。
第四种:
function Stu3(){
}
Stu3.prototype=new Person();
var s=new Stu();
alert(s.show());//张三,232,男
第四种方式和前面几种方式最大的区别就是可以继承对象用prototype定义的属性和方法,而前面三种继承方式都不能继承对象用prototype定义的属性和方法。
但是我们定义对象的时候通常都是将对象的属性定义在类中,方法用prototype定义。
为什么要用prototype定义方法?
如果我们把方法定义在类中,那么我们每当new一个对象时类中定义的方法都会执行一次。如我们用prototype定义方法那么就不管new多少对象都只会执行一次,这样可以提高一点性能。
个人理解望各位多多指点