一、原型继承:将父类的实例对象赋值给子类的原型,私有的公有的都在继承为公有的
function Person(name){
this.name=name;
}
Person.prototype.fn=function(){
console.log(1)
}
var p1=new Person("zhang");
function Son(){
this.age=23;
}
Spn.prototype=p1;
var s1=new Person;
console.dir(s1.name)
二、call 继承:
call方法是函数/类天生自带的一个方法。将父类私有的继承为子类私有的
function Person(name){
this.name=name;
}
Person.prototype.fn=function(){
console.log(1)
}
var p1=new Person("zhang");
function Son(){
this.age=23;
Person.call(this);
}
var s1=new Son;
console.dir(s1)
三、冒充对象继承:
将父类私有的和公有的都继承为子类私有的。使用for in
function Person(name){
this.name=name; } Person.prototype.fn=function(){ console.log(1) } var p1=new Person("zhang"); console.log(p1) for(var key in p1){ console.log(key)//name fn } for in 可以遍历对象的公有属性 fn 就是公有的function Person(name){
this.name=name;
}
Person.prototype.fn=function(){
console.log(1)
}
var p1=new Person("zhang");
function Son(){
this.age=56;
//this是子类的实例对象
for(var key p1){
this[key]=p1[key];
}
}
var s1=new Son;
console.log(s1)
四、混合继承: 私有的继承为私有的,公有的和私有的再次继承为公有的
Call继承和原型继承的结合
function Person(){
this.name="zhangsan"}Person.prototype.fn=function(){ console.log(11111)}var p1=new Person;function Son(){ Person.call(this) //私有的继承私有的}Son.prototype=p1;var s1=new Son;console.log(s1)五、组合继承:私有的继承为私有的 公有的继承为公有的
私有继承借助call 公有继承为公有 不是原型赋值给原型。因为原型是对象,是复合数据类型,是地址赋值给了前者,导致二者指向同一个原型,得克隆
Js中如何实现继承 var obj2=Object.create(obj1)
var obj1={name:"dengpu"}
var obj2=Object.create(obj1,{age:{value:23}});console.log(obj2)六、中间类继承
function fn(a,b,c){
arguments.__proto__=Array.prototype
arguments.push(89)
console.log(arguments)
}
fn(45,56,23)
Call和apply区别
- call可以传多个参数apply只能传两个参数,apply的第二个参数必须是数组
- Call和apply都是修改函数中this的指向
- 第一个参数都是对象,用于替换函数整的this的,如果不想替换this写成null就行
面试题
var arr=[45,56,23,16,89,3];
function getmin(a){
var min=arr[0];//假如第一个最小
for (var i=1;i<a.length;i++) {
if (min>a[i]) {
min=a[i]
}
}
return min;
}
var sd=Math.min(arr)函数封装得到的
--------------------------------
var s=Math.min.apply(null,arr)一行代码得到数组中的最小值
---------------------------------------------------------------------------------------------
类 私有的 公有的
Fn.call(obj,跟fn的参数匹配); 拿obj取代fn中的this然后调用fn
function fn(){
this.a=123;
console.log(this.a)
}
var obj={a:56};
fn.call(obj) //123
console.log(obj.a) //123