博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.15继承
阅读量:5331 次
发布时间:2019-06-14

本文共 2293 字,大约阅读时间需要 7 分钟。

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

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

 

 

 

 

转载于:https://www.cnblogs.com/yuanyeds/p/11358021.html

你可能感兴趣的文章
#10015 灯泡(无向图连通性+二分)
查看>>
elasticsearch 集群
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>
博弈论小结
查看>>
模拟Post登陆带验证码的网站
查看>>
NYOJ458 - 小光棍数
查看>>
java中常用方法
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>