## 面向對象編程中的 this
### 1.this在對象中的運用
this 關鍵字是個非常重要的語法點,在 javascript 編程中如果對 this 不能理解,大部分的編程任務是無法完成的。
this 返回的是一個對象,簡單的說就是返回屬性或者方法當前所在的對象。
> this.property,在這個代碼中,this就是指property屬性所在的對象
~~~javascript
var person = {
name : "Tom",
description: function() {
return "name:" + this.name;
}
};
console.log(person.description()); // name:Tom
~~~
上面代碼中`,this.name`表示 descriptioin 方法所在的對象的name屬性。調用`person.description()`方法時,descriptioin 方法所有在當前對象是 person,所有就是調用`person.name`。
~~~javascript
var f = function() {
console.log("name:" + this.name);
}
var p1 = {
name : "Tom",
desc : f
};
var p2 = {
name : "Jack",
desc : f
};
p1.desc(); // name:Tom
p2.desc(); // name:Jack
~~~
在上面的代碼中,f函數中使用了this關鍵字,隨著f所在的對象不同,this的指向也不同。
### 2.this在網頁編程中的運用
~~~javascript
<input type="button" value="刪除" onclick="delLine(this)" />
function delLine(obj){
var trNode = obj.parentNode.parentNode;
trNode.parentNode.removeChild(trNode);
}
~~~
### 3.this在函數中的運用
**列子1**
>this 的指向在函數定義的時候是確定不了的,只有函數執行的時候才能去確定this到底指向誰,實際上this最終指向的是調用它的對象。
~~~
function a(){
var user = 'javascript';
lg(this.user);//undifined
lg(this);//Window
}
a();
//window.a();
~~~
> alert 實際上也是window的對象。
**列子2**
~~~
var o = {
user:'javascript',
fn:function(){
lg(this.user);
lg(this);
}
}
o.fn();
window.o.fn();
~~~
> wondow是JS中的全局對象,我們創建變量實際上是給window對象添加屬性。
**列子3**
~~~
var o = {
a:10,
b:{
a:12,
fn:function(){
lg(this.a);
lg(this);
}
}
}
// window.o.b.fn();
var j = o.b.fn;
j();
~~~
> 最終是window調用的fn方法。
- Hello World!
- 介紹
- 語句和變量
- 標識符、注釋和區塊
- 基本數據類型和引用數據類型
- 數據類型
- typeof
- number
- 字符串
- 布爾類型
- 函數
- 數組
- 運算符
- 加法運算符
- 算術、賦值、比較運算符
- 布爾運算符
- 語句
- 條件語句
- 循環語句
- DOM模型
- DOM和DOM節點
- 特征相關屬性
- 節點對象的方法
- Element對象
- Attribute對象
- Text節點和CSS操作
- 事件模型
- 標準庫
- Number對象
- String對象
- Array對象
- Date、Boolean和Math對象
- JSON對象
- 面向對象編程中的 this
- 一切皆對象
- Web Storage
- 錯誤處理機制
- Error對象和try..catch語句
- javascript的原生錯誤類型
- BOM模型
- window對象
- 計時事件