-
继承:自己没有的方法,其他对象有,把其他对象的方法拿过来使用,就像自己也拥有该方法一样。
-
原型式继承:在 js 中, 方法定义在原型对象中, 而属性定义在实例对象中,调用方法的时候, 实例对象本身是没有该成员的, 但是依旧可以调用该方法, 好像这个方法就是该实例对象的一样. 因此, 我们称该实例对象继承自原型对象。
<script> var Person={ sayHello:function(){ console.log('我是'+this.name+'今年'+this.age); } } function Student(name,age){//student构造函数 this.name=name; this.age=age; } //这里把Person对象赋值到Student构造函数的原型对象上,这样Student构造函数的实例就可以运用Person对象的方法 Student.prototype=Person; var s1=new Student('lilei',18);//根据Student构造函数创建一个实例对象s1. s1.sayHello(); </script>
-
-
混入:就是将一个对象中的成员加到另一个对象中(通过自定义extend方法完成继承)
<script> var obj2={ name:'lilei', sayHello:function(){ console.log('我是'+this.name); } }; var obj3={ age:18, sayHello1:function(){ console.log('我是'+this.name+'今年'+this.age); } }; var obj1={ extend:function(obj){ //arguments为函数中默认的对象,里面存储着所有的函数传入参数。 for(var i=0; i< arguments.length;i++){ for(var k in arguments[i]){ this[k]=arguments[i][k]; } } } }; obj1.extend(obj2,obj3);//将obj2和obj3混入到obj1中 obj1.sayHello();// obj1.sayHello1(); </script>
-
混合式继承:将多个对象的各个功能混合在一起,就是通过混入的方式,加到构造函数的原型(prototype)上。
<script> var Person={ sayHello:function(){ console.log('我是'+this.name+'今年'+this.age); } } function Student(name,age){//student构造函数 this.name=name; this.age=age; } Student.prototype.extend=function(obj){ for(var k in obj){ this[k]=obj[k]; } } var s1=new Student('lilei',18);//根据Student构造函数创建一个实例对象s1. var s2=new Student('lllli',18);//根据Student构造函数创建一个实例对象s2. //这样就是Student构造函数继承了Person对象。所有Student构造函数创建的实例都要Pserson对象的方法 Student.prototype.extend(Person); //这样就是Student构造函数的实例s1继承了Person对象。其他Student构造函数创建的实例都没有Pserson对象的方法 // s1.extend(Person); s1.sayHello(); s2.sayHello(); </script>
-
关于继承ES5中给我们内置了一个快速的方法:Object.create(对象)
<script>
var o={
name:'lilei',
age:16,
sayHello:function(){
console.log('我是'+this.name+'今年'+this.age);
}
};
//ES5中内置的Object.create()方法可以让我们快速的继承
var obj=Object.create(o);
obj.sayHello();
</script>
-
Object.create()方法兼容低版本实现原理代码(主要封装一个函数,运用了原型式继承)
<script> function Object_Create(obj){ if(Object.create){ return Object.create(obj); }else{ function F(){} F.prototype=obj; return new F(); } } </script>
-
上下文调用实现继承
<script> var Person={ sayHello:function(){ console.log('我是'+this.name+'今年'+this.age); } } function Student(name,age){//student构造函数 this.name=name; this.age=age; } var s1=new Student('lilei',18);//根据Student构造函数创建一个实例对象s1. var s2=new Student('lllli',18);//根据Student构造函数创建一个实例对象s2. Person.sayHello.call(s2); </script>