js对象继承的问题
js继承方法有多种;
1.利用call()和apply()的方法。
call()里面接受多个参数;apply()只能接受两个参数。
call()第一个参数是本身,后面都是他的属性和方法。
apply()第一个参数是本身,第二个只能是数组。
代码如下:
<script type="text/javascript"> function Person(name,sex){ this.name=name; this.sex=sex; this.info=function(){ console.log(this.name); } } function Teacher(name,sex,course){ Person.call(this,name,sex)//Person.apply(this,[name,sex]) this.course=course; this.infoCourse=function(){ console.log(this.course) } } var t=new Teacher("张三","男","英语"); console.log(t.name)
</script>
2.利用prototype独立出来给其添加子级。
此方法可以添加多个属性和方法。
主要是子级继承父级独立出来的东西。
其父级没独立出来的不能传入。
代码如下:
<script type="text/javascript"> function A(name){ this.name=name; } //给A添加一个方法 A.prototype.say=function(){ console.log(22) } A.prototype.index=11; function B(name,age){this.age=age; } //子级继承父级的独立出来的东西 B.prototype=new A(); var b=new B(20,11) b.say(); console.log(b.name) console.log(b.index) </script>
3.利用复制的方法。
思想是把父级里面的属性和方法便利一遍给给子级。
方法如下:
<script> function A(name){ this.name=name; this.say=function(){ console.log("hello"); }; }; function B(name){ var a=new A(name); //便利数组里的所有的元素 for(var i in a){ //获取里面的所有的属性和方法。 B.prototype[i]=a[i]; }; }; var b=new B("name"); console.log(b.name); </script>