天天看點

call,apply,方法的使用

//apply和call的使用方法
    /*
    * apply的使用文法
    * 函數名字.apply(對象,[參數1,參數2,...]);
    * 方法名字.apply(對象,[參數1,參數2,...]);
    * call的使用文法
    * 函數名字.call(對象,參數1,參數2,...);
    * 方法名字.call(對象,參數1,參數2,...);
    *
    * 作用:改變this的指向
    * 不同的地方:參數傳遞的方式是不一樣的
    *
    * 隻要是想使用别的對象的方法,并且希望這個方法是目前對象的,那麼就可以使用apply或者是call的方法改變this的指向
    *
    * */
      //方法改變this的指向
    function Person(age) {
    this.age = age;
    }
    Person.prototype.sayHi = function (x, y) {
    console.log((x + y) + ":====>" + this.age);//是執行個體對象
    };

    function Student(age) {
    this.age = age;
    }
    var per = new Person(10);//執行個體對象
    var stu = new Student(100);//執行個體對象
    //sayHi方法是per執行個體對象的
    per.sayHi.apply(stu, [10, 20]);
    per.sayHi.call(stu, 10, 20);
    
    function f1(x, y) {
    console.log((x + y) + ":=====>" + this.age);
    }
    //複制了一份的時候,把參數傳入到了f1函數中,x===>10,y===>20,null就是this,預設就是window
    //bind方法是複制的意思,參數可以在複制的時候傳進去,也可以在複制之後調用的時候傳入進去
    //apply和call是調用的時候改變this指向
    //bind方法,是複制的時候,改變了this的指向
        //使用的文法:
    /*
    * 函數名字.bind(對象,參數1,參數2,...);---->傳回值是複制之後的這個函數
    * 方法名字.bind(對象,參數1,參數2,...);---->傳回值是複制之後的這個方法
    *
    * */
    //    var ff=f1.bind(null);
    //    ff(10,20);
    
        //通過對象,調用方法,産生數字

    function ShowRandom() {
      this.number=1;
    }
    //添加原型方法
    ShowRandom.prototype.show1=function () {
      //改變了定時器中的this的指向了,本來應該是window,現在是執行個體對象了
      window.setInterval(this.show2.bind(this),1000);
    };
    //添加原型方法
    ShowRandom.prototype.show2=function () {
      //顯示随機數--
      console.log(this.number);
    };
    //執行個體對象
    var sr=new ShowRandom();
    //調用方法,輸出數字
    //調用這個方法一次,可以不停的輸出數字
    sr.show1();           

繼續閱讀