补充继承以及严格模式

定义继承有哪些方式

 1.  原型链继承

function Father(){

        this.color=["red","blue"]

   }

    function Son(){ }

Son.prototype=new Father()

优点:可以复用父类下的属性和方法

缺点:不能给父类下的变量传值,属性被孩子共享,一个改变全改变

 2.  构造函数继承

function Father(name){

        this.color=["red","blue"]

        this.name=name

    }

    function Son(name){

        Father.call(this,name)

    }

优点:父类下的数据不被共享,子类可以借助父类构造器赋值

缺点:无法实现代码复用,每一个孩子赋值父类的副本

3.组合继承

function Father(name){
       
        this.name=name//借用的

    }

    function Son(name){

        Father.call(this,name)

    }

    Father.prototype.color=["red","blue"]//共享的

Son.prototype=new Father()

优点:既可以找到原型上的属性和方法继承,又可以给父类进行传参

缺点: 每创建一个新对象,多次调用父类对象构造器,会在内存生成多个,浪费资源

4.原型模式继承

var Father={color:["red","blue"]}

function person(obj){

     function F(){}

     F.prototype=obj

     return new F()

}

var s1=person(Father)

优点:可以复用父类下的属性和方法

缺点:不能给父类变量传值,属性被孩子对象所共享,一个改变都改变

5.寄生继承模式

var Father={color:["red","blue"]}

function person(obj){

     function F(){}

    F.prototype=obj

     var f= new F()

     f.say=function(){

        console.log(this.color)

     }

    return f

}

优点:可以复用父类下的属性和方法,是原型模式的增强版,可以自己新增属性和方法

缺点:不能给父类变量传值,属性被孩子对象所共享,一个改变都改变

6.寄生组合继承

  function Father(name){

        this.name=name

    }

    Father.prototype.color=["red","blue"]

    function Son(name){

        Father.call(this,name)

    }

    function fun(son,father){

        son.prototype=Object.create(Father.prototype)

        son.prototype.constructor=son

    }

fun(Son,Father)

var s1=new Son("asd")

优点:可以借助父类构造器,可以共享原型数据,可以创建不同实例对象,可以实现深拷贝,解决了资源浪费

严格模式

用来消除js语法中不合理的不严谨的代码,让代码运行更啊安全,提高编译效率

定义:

"use strict"

限定内容

  1. 变量必须要用var声明
  2. 函数的顶层不在指向window,而是指向undefined
  3. 不能定义和eval同名的变量或函数
  4. 禁止使用delete关键字删除
  5. 禁止使用argument,和calee和caller方法
  6. 禁止使用width语句
  7. 禁止函数重名
  8. 禁止对象属性重名
  9. 禁止使用八进制数
  10. 不允许在非函数代码块中声明函数

例如:

"use strict"

a=12

console.log(a)//不用var声明报错

//不能用with语句

 with(location){

        console.log(href)

        console.log(location.pathname)

        console.log(location.port)//端口号

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子^-^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值