//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();