apply和call的使用方法: 1,apply的使用語法 函數名字.apply(對象,[參數1,參數2,...]); 方法名字.apply(對象,[參數1,參數2,...]); 2,call的使用語法 函數名字.call(對象,參數1,參數2,...); 方法名字.call(對象,參數1,參數2, ...
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]);//30:====>100 per.sayHi.call(stu, 10, 20);//30:====>100apply和call的使用方法: 1,apply的使用語法 函數名字.apply(對象,[參數1,參數2,...]); 方法名字.apply(對象,[參數1,參數2,...]); 2,call的使用語法 函數名字.call(對象,參數1,參數2,...); 方法名字.call(對象,參數1,參數2,...); 作用:改變this的指向,只要是想使用別的對象的方法,並且希望這個方法是當前對象的,那麼就可以使用apply或者是call的方法改變this的指向 不同的地方:參數傳遞的方式是不一樣的
function Person(age) { this.age=age; } Person.prototype.play=function () { console.log(this+"====>"+this.age); }; function Student(age) { this.age=age; } var per=new Person(10); var stu=new Student(20); //複製了一份 var ff=per.play.bind(stu); ff();bind是用來複制一份 使用的語法: 函數名字.bind(對象,參數1,參數2,...);---->返回值是複製之後的這個函數 方法名字.bind(對象,參數1,參數2,...);---->返回值是複製之後的這個方法 bind 返回的是一個新的函數,你必須調用它才會被執行 總結: call 、bind 、 apply 這三個函數的第一個參數都是 this 的指向對象,第二個參數差別就來了: call的參數是直接放進去的,第二第三第n個參數全都用逗號分隔,直接放到後面 obj.myFun.call(對象,參數1,參數2,...); apply的所有參數都必須放在一個數組裡面傳進去 obj.myFun.apply(對象,[參數1,參數2,...]); bind除了返回是函數以外,它 的參數和call 一樣。 當然,三者的參數不限定是string類型,允許是各種類型,包括函數 、 object 等等!