实现继承

80 阅读2分钟

实现继承

自己理解的继承:

function Animal(legsNumber){
    this.legsNumber=legsNumber
}  
//有一个Animal 父类的类属性 私有属性

Animal.propotype.kind="动物"
//这个Animal 的原型 为动物 共有属性

function Dog(name){
Animal.call(this,4)
this.name=name
}
//声明一个狗函数接受一name 调用Animal的私有属性
Dog.protopype.__proto__=Animal.prototype  //这种继承方式已经被淘汰,因为每个浏览器不一定都有用.__proto__

let emptyAnimal=function(){空}  //声明一个空函数 这个空函数可以删除Animal的有属性
emptyAnimal.protopype=Animal.prototype //这个空函数的原型继承Animal的原型 

**如果没有这个空函数,直接让Dog.prototype=new Animal() 会在Dog的原型上添加一个腿数的属性
是new加的,new的五个属性中带有绑定原型的属性**

Dog.prototype=new emptyAnimal()

用class相对好理解一些:

class Dog extend Animal{  //extend可以继承Animal
construction(){
super(4)  //这个super继承腿数 自动执行  this.legsNumber=legsNumber
}
}

new 都做了什么

  1. 构建新的临时对象
  2. 指定this=临时对象
  3. 临时对象.proto=构造函数.prototype
  4. 执行构造函数
  5. 返回临时对象

原型链

有一个对象x={}这个对象隐藏属性有个__proto__,这个__proto__指向Object.prototype

x.__?????__ === Object.prototype // 原型

我们说 x 的原型 是 Object.prototype,或者说 Object.prototype 是 x 的原型 而这个 ????? 属性的唯一作用就是用来指向 x 的原型的。

假设我们有一个数组对象 a=[] ,这个 a 也会有一个隐藏属性,叫做 __?????__这个属性会指向 Array.prototype ,即

a.__?????__ === Array.prototype

我们说 a 的原型是 Array.prototype ,跟上面的 x 一样。但又有一点不一样, 那就是 Array.prototype 也有一个隐藏属性 ????? ,指向 Object.prototype , 这样一来,a 就有两层原型:

a ===> Array.prototype ===> Object.prototype

想要修改x的原型不可以用.__proto__因为每个浏览器不一定都有用.__proto__所以 可以用const x = new 构造函数()

节流 触发技能后,技能CD了 用于点击后多少秒内不能再点击

const d =()=>{
    console.log('闪现')
  }
const throttle=(d,time)=>{
    let timer=null
    return()=>{
      if(time===null){return}
        d()
        timer=setTimeout(()=>{
        let timer=null
    },time)
  }
}

防抖 回城时不能被打断 用于边框拖拽后页面响应

const f=()=>{
console.log('回城啦')
}
const deboun=(f,time)=>{
let timer=null
return()=>{
if(timer){clearTimeout()}
timer=setTimeout(()=>{
f()
timer=null
},time)
}
}
const tp=deboun(f,3000)