最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

幾句話帶你理解JS中的this、閉包、原型鏈

 更新時(shí)間:2016年09月26日 09:48:09   作者:蘇福  
在javascript前端開發(fā)階段經(jīng)常會(huì)遇到this,閉包,原型鏈知識,那么大家對這三種的基本知識理解嗎?今天小編就帶領(lǐng)大家一起學(xué)習(xí)this,閉包,原型鏈的知識,感興趣的朋友一起看看吧

原型鏈

所有對象都是基于Object.prototype,Object.prototype就是JavaScript的根對象,在Object.prototype中定義的方法都可以被其它對象訪問到,當(dāng)然也可以被重寫了,所以直接在Object.prototype上調(diào)用的是原始功能的toString()方法,該方法會(huì)放回參數(shù)對象的內(nèi)置屬性[[class]]的值,這個(gè)值是個(gè)字符串,比如'[Object String]'

要理解原型鏈機(jī)制的話,首先得知道根本原因:JavaScript中的對象都有一個(gè)內(nèi)置屬性[[Prototype]],這個(gè)屬性和非標(biāo)準(zhǔn)的__proto__屬性一樣,__proto__在ES6中被納入標(biāo)準(zhǔn)了,可以說它們基本上是等價(jià)的,但內(nèi)置屬性是無法訪問到的。對象之間通過內(nèi)置屬性[[Prototype]]關(guān)聯(lián)了起來就形成了原型鏈,而原型鏈的頂層就是根對象Object.prototype,Object.prototype的原型將是null,即Object.prototype.__proto__ === null;

例如:

在訪問對象的屬性的時(shí)候,如:obj.a,首先查找自身,沒有,就到它的內(nèi)置屬性[[Prototype]]所引用的對象上找,還是沒有,就繼續(xù)在這個(gè)上層對象的內(nèi)置屬性[[Prototype]]所引用的對象上找,一直找到根對象Object.prototype,找不到就返回undefined;

this

理解this的第一步就是要明白:this既不指向函數(shù)自身,也不指向函數(shù)的詞法作用域;

this是在運(yùn)行時(shí)進(jìn)行綁定的,而不是在編寫時(shí)綁定,它的上下文取決于函數(shù)調(diào)用時(shí)的各種條件;

this的綁定和函數(shù)聲明的位置沒有任何關(guān)系,只取決于函數(shù)的調(diào)用位置和調(diào)用方式;

this綁定規(guī)則有4點(diǎn):按優(yōu)先級1到4判斷

1.由new調(diào)用?綁定到新創(chuàng)建的空對象;

2.由call、apply、bind調(diào)用?綁定到指定的參數(shù)對象;如foo.call(obj)

3.由上下文對象調(diào)用?綁定到這個(gè)上下文對象;如obj.foo()

4.默認(rèn)情況下綁定到全局對象,foo();在嚴(yán)格模式下綁定到undefined;

閉包

function foo(){
var a = 2;
function bar(){}
return bar;
}
var a = foo();
a(); 

閉包:不是指函數(shù)bar也不是a,它是一個(gè)引用,這個(gè)引用被內(nèi)部函數(shù)bar持有,這個(gè)引用指向外部函數(shù)foo的整個(gè)作用域,它使得這個(gè)作用域即使在外部函數(shù)foo()執(zhí)行后也不會(huì)被垃圾回收器回收。也就是說這個(gè)外部函數(shù)foo的作用域就是閉包本身。
無論通過何種手段(直接或間接)將內(nèi)部函數(shù)傳遞到所在的詞法作用域以外,它都會(huì)持有對原始定義作用域的引用,無論在何處執(zhí)行這個(gè)函數(shù)都會(huì)使用閉包。

var fn; //間接傳遞函數(shù)
function foo(){
var a = 2;
function baz(){
console.log(a);
}
fn = baz;
}
function bar(){ fn();}
foo();
bar(); function foo(){
var a = 2;
function baz(){
console.log(a);
}
bar(baz);
}
function bar(fn){ fn(); }

相關(guān)文章

  • js完美實(shí)現(xiàn)@提到好友特效(兼容各大瀏覽器)

    js完美實(shí)現(xiàn)@提到好友特效(兼容各大瀏覽器)

    本文給大家分享的是一則使用javascript完美實(shí)現(xiàn)兼容各大瀏覽器的@好友自動(dòng)提示的特效,是根據(jù)百度貼吧的效果模仿來的,推薦給小伙伴們,希望大家能夠喜歡。
    2015-03-03
  • JavaScript笛卡爾積超簡單實(shí)現(xiàn)算法示例

    JavaScript笛卡爾積超簡單實(shí)現(xiàn)算法示例

    這篇文章主要介紹了JavaScript笛卡爾積超簡單實(shí)現(xiàn)算法,涉及javascript數(shù)組遍歷、添加簡單操作技巧,需要的朋友可以參考下
    2018-07-07
  • JavaScript提高加載和執(zhí)行效率的方法

    JavaScript提高加載和執(zhí)行效率的方法

    JavaScript在瀏覽器中的性能成為開發(fā)者所面臨的最重要的可用性問題。而這個(gè)問題又因JavaScript的阻塞特性變的復(fù)雜,也就是說當(dāng)瀏覽器在執(zhí)行JavaScript代碼時(shí),不能同時(shí)做其他任何事情。本文詳細(xì)介紹了如何正確的加載和執(zhí)行JavaScript代碼,從而提高其在瀏覽器中的性能。
    2017-02-02
  • Javascript 圓角div的實(shí)現(xiàn)代碼

    Javascript 圓角div的實(shí)現(xiàn)代碼

    為什么要做圓角的div: 圓角div平滑美觀,某些情況下有比較不錯(cuò)的效果。比如說要做一個(gè)報(bào)message的消息框,那么動(dòng)態(tài)的生成一個(gè)圓角div則很有意義。而對html樣式控制的css本身是不直接支持圓角div的。
    2009-10-10
  • javascript之Partial Application學(xué)習(xí)

    javascript之Partial Application學(xué)習(xí)

    在數(shù)學(xué)中,一個(gè)函數(shù)是描述每個(gè)輸入值對應(yīng)唯一輸出值的這種對應(yīng)關(guān)系,符號為 f(x)。例如,表達(dá)式 f(x)=x2表示了一個(gè)函數(shù) f,其中每個(gè)輸入值x都與唯一輸出值x2相聯(lián)系
    2013-01-01
  • js中的布爾運(yùn)算符使用介紹

    js中的布爾運(yùn)算符使用介紹

    布爾運(yùn)算符 && 和 || 的時(shí)候,我說過它們的結(jié)果是布爾值,它們也能用于計(jì)算其他的類型的數(shù)據(jù),這種時(shí)候,返回的就將是其中的一個(gè)參數(shù)了
    2013-11-11
  • JS獲取DropDownList的value值與text值的示例代碼

    JS獲取DropDownList的value值與text值的示例代碼

    本篇文章主要是對JS獲取DropDownList的value值與text值的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 使用JS的input框?qū)崿F(xiàn)音頻文件的上傳與播放功能

    使用JS的input框?qū)崿F(xiàn)音頻文件的上傳與播放功能

    最近的系統(tǒng)加的功能是越來越多了,前兩天老板又讓實(shí)現(xiàn)一個(gè)錄音上傳的功能,可以點(diǎn)擊播放按鈕打開音頻播放器,點(diǎn)擊暫停按鈕暫定播放,想了想決定使用input框的file類型加上接收的參數(shù)為audio來實(shí)現(xiàn)此功能,感興趣的朋友可以參考下
    2024-06-06
  • JS值當(dāng)前DIV的ID值的代碼

    JS值當(dāng)前DIV的ID值的代碼

    JS值當(dāng)前DIV的ID值的代碼...
    2007-05-05
  • 從JQuery源碼分析JavaScript函數(shù)的apply方法與call方法

    從JQuery源碼分析JavaScript函數(shù)的apply方法與call方法

    這篇文章主要介紹了從JQuery源碼分析JavaScript函數(shù)的apply方法與call方法,本文結(jié)合JQuery源碼和js高級程序設(shè)計(jì)再次探究apply方法與call方法,需要的朋友可以參考下
    2014-09-09

最新評論

双鸭山市| 仁布县| 大邑县| 洱源县| 古田县| 通河县| 西峡县| 周至县| 靖宇县| 安化县| 乃东县| 介休市| 枣强县| 绥滨县| 赤水市| 海盐县| 中宁县| 花垣县| 伊吾县| 大荔县| 芷江| 宁晋县| 英德市| 广饶县| 绵阳市| 方正县| 琼中| 陆良县| 浮梁县| 鹤壁市| 壤塘县| 象山县| 盐津县| 广德县| 康乐县| 铅山县| 安阳市| 双鸭山市| 汉中市| 五华县| 嘉禾县|