JS高级重点知识

一.对象创建的方式

   a.字面量创建

       优点:简单

       缺点:  1.无法批量创建相同对象

                  2.无法通过迭代的方式动态创建对象

 b.工厂模式创建

function Factory(height,weight) {

            var obj=new Object()

            obj.height=height

            obj.weight=weight

            return obj

        }

     优点:可以快速创建相同类型对象

     缺点:  .无法明确实例类型,都是object

 c.构造函数创建

    优点: 决了工厂问题弊端,可以简单对应实例类型

     缺点:  同样的方法会开辟不同的内部,造成大量的内存消耗

d.原型创建:将所有的共有的方法或者属性,绑定到构造函数的原型上

二、构造函数中的常用方法

     1.isPrototypeOf() :判断对应对象是否是基于对应构造函数创建的

  function Peoole(name,age){
            this.name=name
            this.age=age
        }

  var p1=new People("lyffy",18)
  var bool=People.prototype.isPrototypeOf(p1)  //true

   而instance of与它的作用相反:


var bool=p1.instanceof Student  //true

 2.obj.hasOwnProperty(key):  判断当前key是否在其构造函数里

    var bool=p1.hasOwnProperty("name") //T

    需要注意,若属性和方法写在了构造函数的原型对象上,则返回false

3.key in obj:判断对象是否具备对应属性

    只要构造函数里存在当前key(无论写在哪里),都会返回true

例子:编写一个方法判断对象的当前属性,是否是从原型中得到

function hasPrototype(obj,key) {
 return key in obj && obj.hasOwnProperty(key)==false
}

二、面向对象编程

     1.特点:

        a.通过对象分析问题

        b.封装性:将属性和方法维护封装到对象中,以节约维护成本,提高安全性(私有变量)

        c,继承性:子类可以继承父类的属性与方法

        d.多态性:一个类可以创建多种对象

    2.继承性:

        a.冒充继承:只能继承属性,无法继承方法

        b.原型继承:可以继承父类方法,但无法对父类属性初始化,子类的所有实例对象属性都相同

        c.混合继承:使用冒充继承来继承属性,原型继承来继承方法

   3.call、apply、bind

    相同点:都是改变this指向

    不同点:a.call与apply都会立即调用函数,而bind不会

                        这里有个案例,实现点击按钮后禁用,三秒后自动恢复的功能

   var btn=document.querySelector('button')
      btn.onclick=function() {
       this.disabled=true
         setTimeout(function(){

            this.disabled=false
         }.bind(this),3000) 
      }

                  最开始setTimeout里的this是指向的windows对象,我们用bind将this的指向改为按钮btn后就可以实现该功能了,由于要求3s后再执行,所以这里用bind而不是用call

              b,apply与call类似,区别在于参数为数组。

 (关于call、apply、bind的底层实现方式,后续文章再详细介绍)

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值