[TOC]

(一) new关键字的作用

  1. 自动创建临时对象 ( 在函数内部使用this可以访问到这个临时对象 )
  2. 自动绑定该Function对象的原型 ( 统一叫做prototype )
  3. 把传入的参数赋给给临时对象
  4. 自动return这个临时对象 ```javascript

    <a name="ySf45"></a>
    ## (二) call、apply 和bind有什么区别?
    
    三者都会改变this的指向, 区别:
    
    1. call 和 apply 的功能相同,区别在于传参的方式不一样:
       1. call的第一个参数是this要指向的对象, 第二个,第三个....都是调用函数需要的参数。
       1. apply第一个参数是this要指向的对象, 第二个参数是数组或类数组。
    ```javascript
    <script>
        // 1. 声明两个变量和一个函数
        var username = '张三';
        var age = 18;
    
        function say(provice, city) {
            console.log('this=', this);
            console.log(`我来自${provice}${city}`);
            console.log(`我叫${this.username},今年${this.age}岁`);
        }
    
        // 2. 创建一个对象
        var person = {
            username: '老胡',
            age: 100
        };
    
        say('广东', '深圳');
    
        // 3. 使用call改变this的指向:第一个参数是this将要指向的对象, 第二参数,第三个参数.....,这些参数函数调用需要传入的参数
        say.call(person, '广西', '贵港');
    
        // 4. 使用apply改变this的指向:第一个参数是this将要指向的对象, 第二参数是个数组,数组放入的是函数需要的参数
        say.apply(person, ['陕西', '西安']);
    </script>
    
    1. bind 和 call/apply 有一个很重要的区别,
      1. 一个函数被 call/apply 的时候,会直接调用,但是 bind 会创建一个新函数, 不会直接调用
      2. 当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this, 新函数的调用和原来函数的调用一模一样,除了this的指向不一样之外

        (三) this的指向

        1. 方法调用, 谁调用指向谁

        2. 函数里的函数调用

        3. 构造函数中的this指向创建出的对象。

        4. 存在call、apply和bind这三个方法的时候, this指向了传入的对象