『壹』 javascript 中的this如何判斷他是代表哪一個對象呢
一.This對象的概述
在javascript編程中,我們經常用到this關鍵字,但有時也經常被它搞得頭暈,下面將說明this的作用范圍與以及它所指代的對象。
This特指當前對象,所有通過this.attr賦予的屬性,都屬於當前對象;那當前對象是什麼呢,它的作用范圍又是什麼呢,在不同情況下,this對象的表現形式各不相同,下面就講講我對this對象的理解。
二.This所指代的對象
1. 對於javascript,它的編寫方式比較隨意,但擴展性很強,我們可以使用面向過程的編寫方式,也可以使用面向對象的編寫方式,在這兩種編寫方式下,this的表現形式是不同的,下面我們先看一下定義變數的一些方式。
下面我們看一個示例(這是一個面向過程的調用方式,先不急於看結果,你可以自己想一下執行結果該是什麼):
functiontest(){
var1=100;
varvar2=100;
this.var3=100;
f1=function(){}
varf2=function(){}
functionf3(){}
this.f4=function(){}
}
test();
alert(typeof var1);
alert(typeof var2);
alert(typeof var3);
alert(typeof f1);
alert(typeof f2);
alert(typeof f3);
alert(typeof f4);
//======以下是上面的執行結果======
1.number
2.undefined
3.number
4.function
5.undefined
6.undefined上面f2的寫法等價於f3的寫法
7.function
解析:我們可以把window看成一個大對象,它是Window對象的實例化,我們編寫的所有javascript代碼都包含在該對象內,因此,當前對象this特指window實例。
1. alert(typeof var1);//number
var1是一個未明確定義的變數,根據作用域范圍定義,該對象屬於window實例的對象,它的作用范圍為全局。
2. alert(typeof var2);//undefined
var2是一個明確定義枯核液的變數,根據作用域范圍定義,該對象的作用域范圍為函數級別,即test函數所屬范圍,因此不可訪問。
3. alert(typeof var3);
var3是以對象屬性的方式定義的,但是test調用的時候卻是氏手以過程的方式調用,也就是說test沒有被實例化成對象,並且test屬於window對象,那麼當前對象this仍然是window,所以var3屬性是屬於window的。
4. alert(typeof f1);
f1函數與var1變數同理
5. alert(typeof f2);
f2函數與var2變數同理
6. alert(typeof f3);
f3函數與var2變數同理
7. alert(typeof f4);
f4函數與var3變數同理
//===============================
下面是一個面向對象的調用示例:
functiontest(){
var1=100;
varvar2=100;
this.var3=100;
f1=function(){}
varf2=function(){}
functionf3(){}
this.f4=function(){}
}
t =newtest();
alert(typeof var1);
alert(typeof var2);
alert(typeof var3);
alert(typeof t.var3);
alert(typeof f1);
alert(typeof f2);
alert(typeof f3);
alert(typeof f4);
alert(typeof t.f4);
//======以下是上面的執行結果======
1. Number
2. Undefined
3. Undefined
4. Number
5.沒物 Function
6. Undefined
7. Undefined
8. Undefined
9. Function
解析:這次test是使用面向對象的方式調用的,下面我們看一下,為何執行結果會是如此:
1. alert(typeof var1);還是作用域的問題,未明確定義為全局變數
2. alert(typeof var2);明確定義,為函數級別變數
3. alert(typeof var3);
因為test當前是使用面向對象的方式調用的,那麼test對象中的當前對象為實例化的test,即this已經不是window對象了,而是test的實例化t
4. alert(typeof t.var3);
由上面解析可知,var3屬於對象t,那麼自然可以獲得此變數
5. alert(typeof f1);同理var1
6. alert(typeof f2);同理var2
7. alert(typeof f3);同理var2
8. alert(typeof f4);同理var3
9. alert(typeof t.f4);同理var3
三.This的操作與修改
上面我們了解了一下this指代的對象和作用范圍,但實際上this是可以被指定修改的,我們可以通過call,apply等函數指定當前函數的this對象,通常這些函數也用於繼承的實現。
如上面的函數通過call來調用指定this對象,將獲得完全不同的執行結果,以下我們通過call實現了javascript的繼承。
functionf1(){
this.age=27;
}
functiontest(){
f1.call(this);
this.address='地址';
}
t=newtest();
alert(t.age);
alert(t.address);
不是原創的,希望對你有幫助。
『貳』 js里this指向的對象
this在函數里指向調用當前函數的對象,
each本身是一個函數,如果this可以直接寫在each函數中那當然是指span對象,但很明顯each裡面是嵌套了一個匿名函數的,匿名函數沒有顯式的調用者,所以只能是最上層的dom代表this
『叄』 js怎樣獲得上一層的this對象
使用jquery可以很方便的解決這個問題。
parent([expr])
取得一個包含著所有匹配元素內的唯一父元素的元素集合。容
可以使用可選的表達式來篩選。
<div><p>Hello</p><p>Hello</p></div>
<scripttype="text/javascript">
$("p").parent();//獲取p元素的父級元素(div);
</script>
『肆』 js函數中this是全局變數還是當前對象
1.this總是指向函數的直接調用者(而非間接調用者)祥昌;
2.如果有new關鍵字,this指向new出來的那個對象;
3.在事件中,this指向觸發這個事件的對象,特殊的是,IE中的拿培attachEvent中的this總是指向全局對謹敏扒象Window;
『伍』 關於JS的THIS
這個問題問到js的精知櫻髓了。
在js中,萬物皆對象,函數只是對象的一種。
js的this,指代著當前對象的自身(itself),但通過你的問題的內容,發現,你關注的地方並不單單在this關鍵詞。
function a(value){
this.value =value;
alert(this.vlaue);
}
上面的這個函數語句,意味著,創建了名字為a,參數為value的函數對象:
這個函數對象有一個來自於參數的動態屬性value;
這個函數對象還有一個返回值為void的window內置函數alert;
這個函數對象自身沒有返回值(void)。
alert(new a(1).value);
上面的這個語句,意味著,新建一個參數為1的a對象,並把這個對象的value作為參數賦值給window的alert函數,並執行window的alert函數。
在上面的語句中,測試時,會出現兩次警告框,且警告框的內容都是1,這是因為在新建a對象的時候,執行了一次alert,拿到a對象的value後,又執行了一次alert。
alert(window.a(3));
上面的這個語句,意味著,把3作為window對象的a函數的一個參數,執行a函數。
在上面的語句中,測試時,也會出現兩次警告框,但是第一次是3,第二次就是undefined了,這是因為,window.a(3)執行的時候,會alert一下,內容就是3,alert(...)執行的時候,因為裡面的window.a(3)沒有返回值,所以alert的參數就是沒有,所以就導致彈出了一個「undefined」
function a(){
fucntion b(){}
return b;
}
new a()()
可以這么寫(new a()())的原因是:
1、「new a()」 ,這個是個對象創建過程,就是說,這樣可以創建一個全新的函數對象。
2、第二個「()」,這個是個函數執行過程,就是說,加上一對「()」後,這個對象函數才開始執行。
a().b()
不可以這么寫的原因是:
a()會讓這個a函數對象執行後,返回的是一個名字為沒有名字的空函數對象,這個空函數搭攜叢對象裡面,並沒有一個名字叫b的方法。
你如果想讓上面的a裡面的b函數順利執行,可以參考下面的案例:
function a(){
function b(){alert(111)}
return b;
}
a()();//這樣你就順利的看到這個b函數執行了。
最後給你一個讓你頭暈的隱租案例,呵呵。考慮一下是如何執行的,這個案例你完全搞明白後,基本上js的函數對象返回值問題,就不會再有了。
function a(){
this.b = function (){
return this.c = function(){
alert(111);
}
}
}
(new a().b())();
『陸』 javascript中this獲取當前對象問題
首先,this指的是對函數本身的引用。conclick事件調用的是這個事件,要獲取的img的src屬性,是dom image的屬性,並不是函數change_pic的,所以當然不管用了,最好給函數傳參,如onclick="change_pic(this)"吧img這個對象傳給函數。函數中通過 參數.src引用就OK了。希望對你有所幫助!
『柒』 js 在對象里怎麼獲取當前對象
varTool={
name:'工具',
print:function(){
console.log(this.name);//this既是當前對象
},
subObj:{
name:'子工具',
print:function(){
console.log(this.name);//this既是當前`subObj`對象
console.log(Tool.name);//上層對象
}
}
};
『捌』 js中this代表什麼意思
代表當前對象啊,js不是有document.getElementByID通過ID獲取對象么,this就是獲取當前對象,比如id為btn的按鈕的onclick方法
onclick="method(this)",這個this就是當前按鈕對象,作用和document.getElementByID("btn")一樣。
『玖』 關於js中this的對象是誰。
bt.click 相當於一孫搭個函數被綁定到了元素上,所以函數調用的時候,是這個元素觸發的函數執行。
所以這個this指代的是元素。
和下面的例子不同。
varlength=10;
vara={
length:鏈凱知4,
b:function(){
alert(this.length)--->這個時候this指代的是a。
棚消}
}
『拾』 js中的this怎樣簡單理解
js是基於對象的腳本,在任何作用域下都有this對象。比如直接在script腳本中寫的代碼內,當前this就指容window,在在function內,this就指當前方法(即對象),如果指定了方法的原型鏈,this就會指向該方法的原型鏈
console.log(this);//window
function Test(){
console.log(this);
}
Test.prototype.method=function(){
console.log(this);
}
var test=new Test();//test
test.method();//test