8.15继承

一、原型继承:将父类的实例对象赋值给子类的原型,私有的公有的都在继承为公有的

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)

Callapply区别

  1. call可以传多个参数apply只能传两个参数,apply的第二个参数必须是数组
  2. Callapply都是修改函数中this的指向
  3. 第一个参数都是对象,用于替换函数整的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

 

猜你喜欢

转载自www.cnblogs.com/yuanyeds/p/11358021.html