成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript-錯(cuò)誤與異常、 this關(guān)鍵字

zhaofeihao / 2758人閱讀

摘要:錯(cuò)誤與異常錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其他編程語言中稱為異常或,錯(cuò)誤。定義一個(gè)全局變量,并賦值對(duì)象的方法綁定在中,構(gòu)造函數(shù)只是一些使用操作符時(shí)被調(diào)用的函數(shù)。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。

錯(cuò)誤與異常

錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其他編程語言中稱為‘異?!颍e(cuò)誤’。解釋器為每個(gè)錯(cuò)誤情形創(chuàng)建并拋出一個(gè)Error對(duì)象,其中包含錯(cuò)誤的描述信息。
通過使用JavaScript提供的異常處理語句,可以用結(jié)構(gòu)優(yōu)化的方式捕捉發(fā)生的錯(cuò)誤,讓異常處理代碼核心業(yè)務(wù)代碼實(shí)現(xiàn)分離。

try...catch語句

try...catch 語句作為js中處理異常的一種標(biāo)準(zhǔn)方式。try語句標(biāo)記一塊待嘗試的語句,如果該語句出現(xiàn)錯(cuò)誤,則通過catch語句進(jìn)行捕捉。

try {
    console.log(v);//- 調(diào)用未定義的變量,語法報(bào)錯(cuò)
}
//用于處理try中出現(xiàn)的錯(cuò)誤
catch (error){
    //error - 表示try中出現(xiàn)錯(cuò)誤的信息
    console.log(error);
}
//終結(jié)快 - 無論catch語句是否處理了try語句中的錯(cuò)誤與異常,都會(huì)輸出finally語句中的內(nèi)容
finally {

}
錯(cuò)誤類型 基本錯(cuò)誤類型

執(zhí)行代碼期間可能會(huì)發(fā)生的錯(cuò)誤類型有多種種類,每種種類都有對(duì)應(yīng)的錯(cuò)誤類型。當(dāng)錯(cuò)誤發(fā)生時(shí),就會(huì)拋出對(duì)應(yīng)類型的錯(cuò)誤對(duì)象。
Error是基本錯(cuò)誤類型,其他錯(cuò)誤類型都繼承于該類型。Error類型的錯(cuò)誤很少見,如果有也是瀏覽器拋出的,這個(gè)基本錯(cuò)誤類型主要目的是提供給開發(fā)人員拋出自定義錯(cuò)誤。

預(yù)定義錯(cuò)誤類型

js提供了7種預(yù)定義錯(cuò)誤類型

拋出語句

與try...catch語句配合使用的還有throw操作符,用于隨時(shí)拋出定義錯(cuò)誤。拋出錯(cuò)誤是,必須給throw操作符制定一個(gè)值。(值不限類型)

function fn(v) {
    if (v){
        return v;
    }else {
        throw {name : "化物語"};
    }
}
//console.log(fn());
/*
        throw {name : "化物語"};
        ^
[object Object]
*/

var result;
try{
    result=fn();
}catch (e){
    result = "aa"
    console.log(e.name);//化物語
}
console.log(result);//aa
this關(guān)鍵字 概述 this是什么

this是js中最復(fù)雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域中。
this都有一個(gè)共同點(diǎn),他總是范慧慧一個(gè)對(duì)象?;蛘哒f,this就是屬性或方法‘當(dāng)前’所在的對(duì)象。

為什么使用this

this可以使API設(shè)計(jì)變得更加簡潔并且易于復(fù)用。

調(diào)用位置

想要了解this的綁定過程,首先要理解調(diào)用位置:調(diào)用位置就是函數(shù)在代碼中被調(diào)用的位置(不是聲明的位置)。

var v = 100;

function fun() {
    console.log(this.v);
}
fun();//undefined(全局對(duì)象不可用)若全局對(duì)象可用為100

var obj ={
    v : 200,
    f : fun   
};
obj.f();//200   當(dāng)前this指向?qū)ο髈bj
綁定規(guī)則 默認(rèn)綁定

在一個(gè)函數(shù)中使用this,當(dāng)該函數(shù)被獨(dú)立調(diào)用。可以把這條規(guī)則看作是無法應(yīng)用其他規(guī)則時(shí)的默認(rèn)規(guī)則。

function fun (){
     console.log(this.v);//當(dāng)前this指向全局對(duì)象
}
//全局變量
var v = 2;
//函數(shù)調(diào)用
fun();//2  - 全局對(duì)象可用
隱式綁定

隱式綁定的規(guī)則需要考慮的是調(diào)用位置是否有上下文對(duì)象,或者說是否被某個(gè)對(duì)象擁有或者包含。(說法不準(zhǔn)確)。

function fun (){
     console.log(this.v);//當(dāng)前this指向?qū)ο髈bj
}
//定義對(duì)象
var obj = {
   v : 23,
   f : fun
}
obj.f();//23
隱式綁定丟失

隱式丟失是最常見的this問題,指的是被隱式綁定的函數(shù)會(huì)丟失綁定對(duì)象,也就是說會(huì)應(yīng)用默認(rèn)綁定,把this綁定到全局對(duì)象上。

function fun(){
    console.log(this.v);
}
var obj {
    v : 23,
    f : fun
}
//定義一個(gè)全局變量,并賦值對(duì)象obj的f方法
var foo = obj.f
foo();//undefined   - this綁定到了全局對(duì)象
顯示綁定

顯示綁定就是明確在調(diào)用時(shí),this綁定的對(duì)象??梢允褂胊pply()方法和call()方法實(shí)現(xiàn)。
這兩個(gè)方法的第一個(gè)參數(shù)就收的是一個(gè)對(duì)象,會(huì)把這個(gè)對(duì)象綁定帶this上,接著在調(diào)用函數(shù)時(shí)制定這個(gè)this。

function fun(){
     console.log(this.v);
};
var obj {
     v : 23,
     f : fun
};
//定義一個(gè)全局變量,并賦值對(duì)象obj的f方法
var foo = obj.f;
foo.call(obj);//23
new綁定

在js中,構(gòu)造函數(shù)只是一些使用new操作符時(shí)被調(diào)用的函數(shù)。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用new來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。
使用new來調(diào)用函數(shù),會(huì)執(zhí)行以下操作

創(chuàng)建一個(gè)全新的對(duì)象

這個(gè)對(duì)象會(huì)綁定到函數(shù)調(diào)用的this

如果函數(shù)沒有返回其他對(duì)象,那么new表達(dá)式中的函數(shù)調(diào)用會(huì)自動(dòng)返回這個(gè)新對(duì)象

function Fun(name){
     this.name = name
};
var fun  = new Fun"花";
console.log(fun.name);//花
實(shí)現(xiàn)繼承
function fun() {
      this.name = "火鍋";
}
//將fun繼承于Fu
function Fu(){
      fun.call(this);
      this.age = 2;
}
var fu= new Fu();

console.log(fu.name);//火鍋
console.log(fu.age);//2
綁定例外 被忽略的this

如果將bull或者undefined作為this的綁定對(duì)象傳入call、apply、bind,這些值在調(diào)用時(shí)會(huì)被忽略,實(shí)際應(yīng)用的是默認(rèn)綁定規(guī)則。

function fun (){
    console.log(this.v);
};
var v = 23 
fun.call(null);//23  - 全局對(duì)象可用的情況下
間接引用

有可能有意或無意的創(chuàng)建一個(gè)函數(shù)的‘間接引用’,在這種情況下,調(diào)用這個(gè)函數(shù)會(huì)應(yīng)用默認(rèn)綁定規(guī)則。
間接引用最容易在賦值時(shí)發(fā)生。

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96936.html

相關(guān)文章

  • JavaScript】面向?qū)ο笾?em>錯(cuò)誤異常this關(guān)鍵字

    摘要:一錯(cuò)誤與異常概述錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其它語言中稱為異常或錯(cuò)誤將每個(gè)錯(cuò)誤中創(chuàng)建個(gè)對(duì)象,描述包含的錯(cuò)誤信息通過使用提供異常的處理語句,可以用結(jié)構(gòu)化方式捕捉發(fā)生錯(cuò)誤,異常處理代碼與核心代碼實(shí)現(xiàn)分離語句語句是指中處理異常一種標(biāo)準(zhǔn)方式, JS(JavaScript)一.錯(cuò)誤與異常1.概述錯(cuò)誤,指程序中的非正常運(yùn)行狀態(tài),在其它語言中稱為異?;蝈e(cuò)誤將每個(gè)錯(cuò)誤中創(chuàng)建個(gè)Error對(duì)象,描述...

    ASCH 評(píng)論0 收藏0
  • JavaScripr中常遇到的錯(cuò)誤this關(guān)鍵字

    摘要:通過使用提供的異常處理語句,可以用結(jié)構(gòu)化的方式來捕捉發(fā)生的錯(cuò)誤,讓異常處理帶啊與核心業(yè)務(wù)代碼實(shí)現(xiàn)分離。錯(cuò)誤與異常處理在應(yīng)用中的重要性是毋庸置疑的。包括內(nèi)置對(duì)象函數(shù)在內(nèi)的所有函數(shù)都可以用來調(diào)用,這種函數(shù)調(diào)用被稱為構(gòu)造函數(shù)調(diào)用。 錯(cuò)誤與異常 概念 錯(cuò)誤與異常是什么錯(cuò)誤,指程序中的費(fèi)正常運(yùn)行狀態(tài),在其他編程語言中稱為‘異?!颉e(cuò)誤’。解釋器會(huì)為每一個(gè)錯(cuò)誤創(chuàng)建并拋出一個(gè)Error對(duì)象,其中包...

    klinson 評(píng)論0 收藏0
  • JavaScript 編程精解 中文第三版 八、Bug 和錯(cuò)誤

    摘要:幸運(yùn)的是,使用符號(hào)創(chuàng)建的構(gòu)造器,如果在不使用來調(diào)用,則始終會(huì)報(bào)錯(cuò),即使在非嚴(yán)格模式下也不會(huì)產(chǎn)生問題。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Bugs and Errors 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 調(diào)試的難度是開始編寫代碼的兩倍。 因此,如...

    wujl596 評(píng)論0 收藏0
  • JavaScript 進(jìn)階知識(shí) - 高級(jí)篇

    摘要:汪汪汪哈士奇大黃狗輸出結(jié)果為這樣寫依然存在問題全局變量增多,會(huì)增加引入框架命名沖突的風(fēng)險(xiǎn)代碼結(jié)構(gòu)混亂,會(huì)變得難以維護(hù)想要解決上面的問題就需要用到構(gòu)造函數(shù)的原型概念 showImg(https://segmentfault.com/img/remote/1460000017534338?w=1440&h=900); JS高級(jí) 前言 經(jīng)過前面幾篇文章的學(xué)習(xí),相信大家已經(jīng)對(duì)js有了大部分的理...

    LiuRhoRamen 評(píng)論0 收藏0
  • 嚴(yán)格模式的簡單認(rèn)識(shí)

    摘要:不支持嚴(yán)格模式的瀏覽器與嚴(yán)格模式的瀏覽器行為也不一樣,所以不要在未經(jīng)嚴(yán)格模式特性測試情況下使用嚴(yán)格模式。在嚴(yán)格模式下,使用上述標(biāo)識(shí)符作為變量名會(huì)導(dǎo)致語法錯(cuò)誤。嚴(yán)格模式下,命名參數(shù)與對(duì)象是完全獨(dú)立的。在嚴(yán)格模式下,函數(shù)的值始終是指定的值。 嚴(yán)格模式 概述 嚴(yán)格模式是什么 嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種模式。嚴(yán)格模式不是一個(gè)子集:它的語義上與正常代碼有著明顯的差異。...

    learning 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<