跟着艾文一起学前端-第19篇-JavaScript-其他知识点

this关键字的指向

  • 在普通函数 中的this:普通模式下是浏览器的顶级对象window, 严格模式时是undefined
  • 在定时器方法中:window.setInterval(function(){},time); 是浏览器的顶级对象window
  • 在对象.方法 中:当前实例对象即调用该方法的对象
  • 在构造函数中:当前实例对象
  • 在原型对象方法中:当前实例对象
  • 事件绑定方法中: 绑定事件对象

__ proto __和prototype

在js中函数也是对象,所有的函数都是内置对象Function它的构造函数创建出来的实例对象。

  • prototype 是构造函数的标志,构造函数是函数,所以prototype说明该对象是函数,判断是不是函数的方式也可以通过判断是否有prototype属性,有prototype的就是函数
  • __ proto__ 是对象的标志;但不是函数;有__proto__属性的都是对象

apply 和 call

apply和call两个方法在Function.prototype中,apply和call的作用是改变this的指向

使用方式:

函数名称.apply(object, 参数数组);

函数名称.call(object, {…*}代表多个参数);

不传参数或者传入null时:
  • 函数名.apply(); 这就调用了该函数 此时函数中的this是window
  • 函数名.call(); 调用了该函数 , 此时函数中的this是window
    给上面的两个方法分别传入null值,apply(null) / call(null) this的指向没有改变依旧是window
有参数
  • 函数名称.apply(obj , [ 值1 , 值2 ]); 此时该函数中的this是obj
  • 函数名称.call(obj , 值1 , 值2 , …); 此时该函数中的this是obj

从上面我们可以得出使用apply和call传入对象时,就相当于把window的函数给了传入的对象了,函数中的this的指向发生了改变。

bind

作用是复制一份被调用的函数
使用方法: 被复制的函数.bind( obj , {…*}); 返回值是这个被复制函数的副本;
var fun = funTest.bind(); 相当于把funTest复制了一下返回给fun函数;参数可以在复制的时候传入,也可以在调用的时候传入。this的指向会改为传入的obj,如果没有传入对象,或者是一个null对象的话,this是window。

闭包

闭包的作用:缓存数据,延长作用域链;
闭包的模式:函数模式、对象模式;
闭包的优点:可以缓存数据
闭包的缺点:缓存的数据不能及时释放

发布了37 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u012764358/article/details/105731789