1. 程式人生 > >js中怎麼改變this指向

js中怎麼改變this指向

/*
* callapply可以借用其他物件的方法去操作指定的物件。*
* 通常例項的方法內部在實現時,都會使用this來獲取對應的例項,* 即這些方法內部操作的都是this*
* 如果一個方法內部沒有操作this,那麼是無法借用成功的。*
* 借用一個方法操作我們指定的物件,如何操作需要看這個方法具體的功能。* */
/*// 給所有的陣列新增一個遍歷列印值的方法 conArr
Array.prototype.conArr = function() {
    // 這裡通過this,可以獲取呼叫conArr方法的陣列,    // 那麼誰呼叫這個方法,我們就列印誰的值。    var i, len;
    for (i = 0, len = this.length; i < len; i++) {
console.log(this[i]); } }; // 陣列呼叫這個,依次列印123 var arr = [1,2,3]; arr.conArr(); var arr2 = ['a','b','c']; arr2.conArr();*/ /*------------------------------------------*/ // 這是一個偽陣列物件 var obj = { 0: 'abc', 1: 'qwe', 2: 'wsx', 3: 'edc', name: '肥貓', age: '3', length: 5 }; /*// 偽陣列不是真陣列,無法呼叫真陣列的那些方法。//obj.conArr();
// 但是我們還想利用陣列的conArr方法,列印偽陣列中下標儲存的資料。// conArr方法有一個特點,它內部操作的是this// 如果我們能夠讓這個this指向obj,那麼conArr就可以操作obj了。//Array.prototype.conArr.call(obj); [].conArr.call(obj); // 既然可以通過call借用陣列的conArr方法,那麼其他方法是否可行呢?// 借用push方法給偽陣列新增新值[].push.call(obj, 10, 20, 30, 40, 50); console.log(obj); // 借用pop刪除偽陣列中最後一個值[].pop.call(obj); console.log(obj);*/
// 借用slice擷取偽陣列的一部分,得到一個新陣列 //console.log([].slice.call(obj, 1)); // 如果一個偽陣列需要多次使用真陣列的那些方法,可以考慮把偽陣列轉化為真陣列 console.log([].slice.call(obj)); // slice在擷取的時候,只會擷取存在的值 console.log([].concat.apply([], obj)); // apply會根據length平鋪得到所有的值傳給concat