js盲点

  1. eval(string):函数可计算某个字符串,并执行其中的的 JavaScript 代码。该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
  2. 注意: call或apply的第一个参数传的是什么,它们就会将其默认为执行上下文对象。倘若我们没有指明call或apply的执行上下文对象,即,call和apply的第一个参数是null、undefined或为空时,
    • 在非严格模式下,函数内的this指向window或global,浏览器就是window。
    • 严格模式下,null为null,undefined或空为undefined。
    • call方法的其它参数依次传递给借用的方法作参数,而apply就两个参数,第二个参数为一个数组传递。
    • 简单点,就是:

        fun.call(obj, arg1, arg2…) === fun.apply(obj, [arg1, arg2…]) ===  obj.fun(arg1, arg2…);

    • 当参数明确的时候,使用call;当传递的参数不明确时,用 apply咯,即传递arguments给apply作为第二个参数。

   3. 

<!DOCTYPE html>
    <head>
        <title>bind</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
       <script>
           var name = 'window';
           var obj = {
               name:'monkey',
               print: function(){
                   setTimeout(function(){
                       console.log(this.name);
                   }.call(this)/*在这里将bind换成call*/,100);
               }
           };
           obj.print();
       </script>
    </body>
</html>

call或apply是立马呈现’monkey’,而bind是在延迟相应时间后,呈现’monkey’

call或apply是将执行上下文对象换了后,立即执行;而bind是将执行上下文对象换了后,创建一个新函数。

   4. 一定要记住bind方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入的第一个参数作为this,即执行上下文对象。

   5.所有实例对象需要共享的属性和方法,都放在这个prototype对象里面;那些不需要共享的属性和方法,就放在构造函数里面。

posted @ 2017-03-27 11:02  Caraxiong  阅读(97)  评论(0编辑  收藏  举报