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

JavaScript函數(shù)中上下文有哪些規(guī)則

 更新時(shí)間:2021年10月19日 14:31:40   作者:daixiangcn  
上下文是從英文context翻譯過來,指的是一種環(huán)境。在軟件工程中,上下文是一種屬性的有序序列,它們?yōu)轳v留在環(huán)境內(nèi)的對(duì)象定義環(huán)境。在對(duì)象的激活過程中創(chuàng)建上下文,對(duì)象被配置為要求某些自動(dòng)服務(wù)。又比如計(jì)算機(jī)技術(shù)中,相對(duì)于進(jìn)程而言,上下文就是進(jìn)程執(zhí)行時(shí)的環(huán)境

1.規(guī)則1:對(duì)象.方法()

對(duì)象.方法()
對(duì)象打點(diǎn)調(diào)用它的方法函數(shù),則函數(shù)的上下文是這個(gè)打點(diǎn)的對(duì)象。

1.1 案例1

function fn() {
    console.log(this.a + this.b);
}
var obj = {
    a: 66,
    b: 33,
    fn: fn
}
obj.fn();

輸出結(jié)果:

99

1.2 案例2

var obj1 = {
    a: 66,
    b: 33,
    fn: function () {
        console.log(this.a + this.b);
    }
}
var obj2 = {
    a: 66,
    b: 33,
    fn: obj1.fn
}
obj2.fn();

輸出結(jié)果:

7

1.3 案例3

function outer() {
    var a = 11;
    var b = 22;
    return {
        a: 33,
        b: 44,
        fn: function () {
            console.log(this.a + this.b);
        }
    }
}
outer.fn();

輸出結(jié)果:

77

1.4 案例4

function fun() {
    console.log(this.a + this.b);
}
var obj = {
    a: 1, b: 2, c: [{ a: 3, b: 4, c: fun }]
};
var a = 5;
obj.c[0].c();

輸出結(jié)果:

7

2.規(guī)則2:函數(shù)()

函數(shù)()
圓括號(hào)直接調(diào)用函數(shù),則函數(shù)的上下文是window對(duì)象。

2.1 案例1

var obj1 = {
    a: 1, b: 2, fn: function () {
        console.log(this.a + this.b);
    }
}
var a = 3;
var b = 4;
var fn = obj1.fn;
fn();

輸出結(jié)果:

7

2.2 案例2

function fun() {
    return this.a + this.b;
}
var a = 1;
var b = 2;
var obj = {
    a: 3, 
    b: fun(),  // 適用規(guī)則2
     fun: fun
}
var result = obj.fun(); // 適用規(guī)則1
console.log(result);

輸出結(jié)果:

6

3.規(guī)則3:數(shù)組下標(biāo)

數(shù)組下標(biāo)
數(shù)組(類數(shù)組對(duì)象)枚舉出函數(shù)進(jìn)行調(diào)用,上下文是這個(gè)數(shù)組(類數(shù)組對(duì)象)。

3.1 案例1

var arr = ['A', 'B', 'C', function () {
    console.log(this[0]);
}];
arr[3]();

輸出結(jié)果:

A

3.2 案例2

function fun() {
    arguments[3]();
}
fun('A', 'B', 'C', function () {
    console.log(this[1]);
});

輸出結(jié)果:

B

4.規(guī)則4:IIFE

(function(){})();
IIFE(立即可執(zhí)行函數(shù))中的函數(shù),上下文是window對(duì)象。

4.1 案例1

var a = 1;
var obj = {
    a: 2,
    fun: (function () {
        var a = this.a;       // 適用規(guī)則1
        return function () {  // 適用規(guī)則4
            console.log(a + this.a);  // 2+1
        }
    })()
};
obj.fun();

輸出結(jié)果:

3

5.規(guī)則5:定時(shí)器、延時(shí)器

setInterval(函數(shù),時(shí)間);
setTimeout(函數(shù),時(shí)間);
定時(shí)器、延時(shí)器調(diào)用函數(shù),上下文是window對(duì)象。

5.1 案例1

var obj = {
    a: 1, b: 2, fun: function () {
        console.log(this.a + this.b);
    }
}
var a = 3;
var b = 4;
setTimeout(obj.fun, 2000);  // 適用規(guī)則5

輸出結(jié)果:

7

5.2 案例2

var obj = {
    a: 1, b: 2, fun: function () {
        console.log(this.a + this.b);
    }
}
var a = 3;
var b = 4;
setTimeout(function () {
	obj.fun();          // 適用規(guī)則1
}, 2000);

輸出結(jié)果:

3

6.規(guī)則6:事件處理函數(shù)

DOM元素.onclick = function(){};
事件處理函數(shù)的上下文是綁定事件的DOM元素。

6.1 案例1

請(qǐng)實(shí)現(xiàn)效果:點(diǎn)擊哪個(gè)盒子,哪個(gè)盒子就變紅,要求使用同一個(gè)事件處理函數(shù)實(shí)現(xiàn)。

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>規(guī)則6:事件處理函數(shù)</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body div {
            float: left;
            width: 100px;
            height: 100px;
            margin-right: 10px;
            border: 1px solid #000;
        }
    </style>
</head>

<body>
    <div id="box1">1</div>
    <div id="box2">2</div>
    <div id="box3">3</div>
    <script>
        function changeColor() {
            this.style.backgroundColor = 'red';
        }
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var box3 = document.getElementById('box3');
        box1.onclick = changeColor;
        box2.onclick = changeColor;
        box3.onclick = changeColor;
    </script>
</body>

</html>

實(shí)現(xiàn)效果:

在這里插入圖片描述

6.2 案例2

請(qǐng)實(shí)現(xiàn)效果:點(diǎn)擊哪個(gè)盒子,哪個(gè)盒子在2000毫秒之后就變紅,要求使用同一個(gè)事件處理函數(shù)實(shí)現(xiàn)。

與案例1的區(qū)別:需要備份上下文。

function changeColor() {
    var self = this;         // 備份上下文
    setTimeout(function () {
        self.style.backgroundColor = 'red';
    }, 2000);
}
var box1 = document.getElementById('box1');
var box2 = document.getElementById('box2');
var box3 = document.getElementById('box3');
box1.onclick = changeColor;
box2.onclick = changeColor;
box3.onclick = changeColor;

到此這篇關(guān)于JavaScript函數(shù)中上下文有哪些規(guī)則的文章就介紹到這了,更多相關(guān)JavaScript 函數(shù)上下文規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

成武县| 蓬莱市| 广水市| 沭阳县| 醴陵市| 钟山县| 永寿县| 新宾| 文安县| 齐齐哈尔市| 永昌县| 石林| 疏勒县| 共和县| 渝北区| 东港市| 拉萨市| 布尔津县| 阜新| 黄梅县| 康平县| 疏勒县| 昌图县| 百色市| 乌什县| 赣州市| 浦江县| 祁连县| 浮梁县| 从江县| 葫芦岛市| 兴山县| 高清| 马鞍山市| 体育| 金湖县| 安仁县| 梅州市| 海晏县| 普安县| 高州市|