【JavaScript】面向對象之錯誤與異常與this關鍵字

JS(JavaScript)
一.錯誤與異常
1.概述
錯誤,指程序中的非正常運行狀態,在其它語言中稱爲異常或錯誤將每一個錯誤中建立個Error對象,描述包含的錯誤信息
經過使用JavaScript提供異常的處理語句,能夠用結構化方式捕捉髮生錯誤,異常處理代碼與核心代碼實現分離
2.try...catch語句app

  • try...catch語句

是指JavaScript中處理異常一種標準方式,try語句是爲嘗試,如出現錯誤,則以catch語句進行捕獲函數

try{
   //用於捕獲指定語句中錯誤與異常
   console.log(v);
//   調用未定義變量-語法報錯
}
catch(error) {
    //e-表示try語句中出現錯誤信息
    console.log(error);
}
finally {
    console.log(error);
}

3.錯誤類型this

  • throw語句

用來拋出一個用戶自定義的異常,throw後的語句將不會被執行,且控制被傳遞到調用第一個catch塊,如沒有catch塊,將終止程序code

function fn(v) {
    if (v) {
    } else {
       throw { name : '犬夜叉'};
    }
}

// console.log(fn(10));//10
// console.log(fn());

var result;
try {
    result = fn();
} catch (e) {
    result = 'unkown';
    console.log(e.name);
}
console.log(result);

二.this關鍵字
1.概述
定義個函數並必定要返回個對象,經過調用定義對象的位置對象

  • this基本用法
//定義一個全局變量
var v = 100;
//this常常定義在函數的做用域中
function fn() {
    //this老是要返回一個對象
    console.log(this.v);
//    this指向哪一個對象不取決於函數定義位置
}
//this指向哪一個對象,取決於調用的位置
//fn();//函數的調用

// 定義個對象,將fn函數做爲obj對象的方法
var obj = {
    v : 200,
    f : fn
}
console.log(this.v);

2.綁定規則ip

  • 隱式綁定丟失

是指被隱式綁定函數丟失綁定對象,則爲默認綁定,從而把this綁定到全局對象作用域

var v = 100;
//定義哥全局變量
function fn() {
//定義個函數
    console.log(this.v);
}
var obj = {
    v : 200,
    f : fn
    //對象的f()方法指向fn()函數
}
//定義個全局變量,並被賦值爲對象obj的f()方法
var fun = obj.f;
//將fun做爲個函數進行調用
fun();
  • 顯式綁定

明確在調用時,this綁定對象,JS提供這apply()和call()兩個方法實現,第一個參數接收是個對象,把這對象綁定this,接着調用函數是這個thisio

var v = 100;
//定義哥全局變量
function fn() {
//定義個函數
    console.log(this.v);
}
var obj = {
    v : 200,
    f : fn
    //對象的f()方法指向fn()函數
}
//定義個全局變量,並被賦值爲對象obj的f()方法
var fun = obj.f;
//將fun做爲個函數進行調用
fun.apply(obj);
  • new綁定

在JS中構造函數使用new操做符調用函數,內置包括對象函數全部函數均可以調用函數
1新建立個全新對象
2新對象綁定到函數調用this
3該函數如沒有返回其它對象,則new表達式的函數會返回到新的對象console

function Hero(name) {
    this.name = name;
}

var hero1 = new Hero('犬夜叉');
var hero2 = new Hero('戈薇');

3.綁定例外function

  • 被忽略的this

null和undefined綁定在this對象,以call,apply或bind調用會被忽略

function fn(){
//定義個函數
    console.log(this.v);
}

var v = 100;
//定個全局變量
fn.call(null);//undefined
//用call來調用函數
var result = Math.max.apply(null, [1,2,3,4,5,2,3]);
console.log(result);
  • 間接引用

有意無心的建立個函數,並調用這個函數爲默認綁定

function foo() {
    console.log( this.a );
}
var a = 2;
var o = {
    a: 3,
    foo: foo
};
o.foo(); // 3

var p = { a: 4 };

// p.foo = o.foo;
// p.foo();// 4

(p.foo = o.foo)(); // 2
相關文章
相關標籤/搜索