JavaScript是一门面向对象的程序设计语言,但是和java具有不同的继承机制,JavaScript的继承是通过继承原型来创建新的对象,而java中的继承则是直接继承其父类获取父类的属性。下面通过一点代码,体验JavaScript中的继承机制
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype={
hi:function(){
console.log("hi,my name is "+this.name+" i am "+this.age+"years old now");
},
LEGS_NUM:2,
ARMS_NUM:2,
walk:function(){
console.log(this.name+" is walking");
}
}
function Student(name,age,classname){
Person.call(this,name,age);
//this指向新创建的bson
this.className=classname;
}
Student.prototype=Object.create(Person.prototype);
//创建一个空白的原型,原型指向person.prototype,方法可以继承person
var bson=new Student("bson",12,"信管");
console.log(bson);
bson.walk();
bson.ARMS_NUM;
其中Person()是一个构成方法,我们默认方法名为大写字母开头的方法名为构造方法,person这个类有两个属性,一个是age和name,其中Person有一个非常重要的属性就是prototype,这个属性是一个对象,这个对象可以作为创建对象时候的原型。
我们可以往这个原型中,增加属性,这些属性是共享的,只要对象的原型指向该原型,都可以使用这个原型里面的属性。指向原型,指的是,通过该该原型来创建新的对象,或者是构成一个新的原型,而这个原型也是通过Object.create(Person.prototype)方法构建的,所以它的也是指向Person.prototype这个原型。
正确来说,Person.prototype与原型是两回事,因为Person.prototype是Person类的一个属性,原型是一个对象,是用花括号包起来的一块东西,这块东西指向了person.prototype,所以我们在使用继承的时候,继承的是原型这个对象,而不是person.prototype.
之后,我们新建一个对象,bson,bson的属性很多都继承了person.prototype,而name和age并没与修改person类,实现相互独立的功能。