1. 程式人生 > >js中this的應用及指向問題

js中this的應用及指向問題

document size left esp 返回 back 分享 一個 theme

技術分享圖片 this的應用及指向問題

this是Javascript語言的一個關鍵字。它代表函數運行時,自動生成的一個內部對象,只能在函數內部使用。隨著函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this指的是調用函數的那個對象。

this的使用情況:

1、作為普通函數調用,這是函數的最通常用法,屬於全局性調用,因此this就代表全局對象。

2、作為對象方法的調用,函數還可以作為某個對象的方法調用,這時this就指這個上級對象。

3、作為構造函數調用,所謂構造函數,就是通過這個函數生成一個新對象(實例)。這時,this就指這個新對象(實例)。

技術分享圖片 apply 、 call 、bind的介紹(函數的方法)

window.onload = function() {

var oDiv = document.getElementById('box');

oDiv.onclick = function() {

setInterval(function() {

this.innerHTML = '2222222222'; //this:window

}.bind(this), 2000);

}

技術分享圖片 }

apply 、 call 、bind 三者都是用來改變函數的this對象的指向的;第一個參數都是this要指向的對象,也就是想指定的上下文;從第二個參數開始,就是函數的本身的參數;

bind 是返回對應函數,便於稍後調用;apply 、call 則是立即調用 。

我們都知道定時器的匿名函數裏不能寫this,它會指向window

但有了bind方法以後,我們可以隨意設定this 的指向

//obj.showName.call(obj2,200,'');//callshowNamethis的指向改變為obj2

//obj.showName.apply(obj2,[200,'']);//applyshowNamethis的指向改變為obj2

//callapply區別:最後的傳參不一樣,call:直接傳參,apply:參數放在數組中

//1、改this

指向,

//2、繼承功能call

/* window.onload = function() {

var aLi = document.getElementsByTagName('li'); //類數組

var arr=Array.prototype.slice.apply(aLi); //類數組轉真正的數組,slice截取

arr.push('123');

alert(arr);

}*/

//bind

//obj.showName.bind(obj2')(200,');//bind返回一個函數,添加()才能執行

技術分享圖片 對象、命名空間

命名空間namespace(某些語言中叫package),是一個在靜態語言中常見的概念。它可以幫助我們更好地整理代碼,並可避免命名沖突。也就是通過創建一個簡單對象字面量來打包所有的相關函數和變量。這個簡單對象字面量模擬了命名空間的作用。


js中this的應用及指向問題