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

資訊專欄INFORMATION COLUMN

【js】《JavaScript設(shè)計模式與開發(fā)實踐》——this的指向

王晗 / 535人閱讀

摘要:區(qū)分構(gòu)造器是否顯式地返回一個類型的對象例如不顯式返回對象小闊愛寶批龍小闊愛以及顯式返回對象小闊愛寶批龍寶批龍或調(diào)用跟普通函數(shù)相比,這種方式可以動態(tài)改變傳入函數(shù)的例如小闊愛寶批龍小闊愛寶批龍

在js中,this總是指向一個對象,具體要看那個對象在運行時函數(shù)的執(zhí)行環(huán)境(動態(tài)綁定),即“函數(shù)在誰那被調(diào)用,this就指向誰”。

1、在對象的方法內(nèi)調(diào)用——指向該對象

例如

var obj = {
    name: "小闊愛",
    getName: function () {
        console.log("this === obj?", this === obj);
        console.log("this.name=", this.name);
    }
};
obj.getName(); // "小闊愛"

2、在普通方法內(nèi)調(diào)用——指向全局對象window

例如

window.name = "小闊愛";
var getName = function () {
    return this.name;
};
console.log("getName=", getName()); // 小闊愛

或者

window.name = "小闊愛";
var obj = {
    name: "寶批龍",
    getName: function () {
        return this.name;
    }
};
var getName = obj.getName;
console.log("getName=", getName()); // 小闊愛

或者——當函數(shù)里面嵌套函數(shù)時,指向window

window.id = "xiaokuoai";
document.getElementById("baopilong").onclick = function () {
    console.log("this.id=", this.id); // "baopilong"
    var newFun = function () {
        console.log("this.id=", this.id); // "xiaokuoai"
    }
    newFun();
};

注意:在ES5的strict模式下,普通函數(shù)內(nèi)的this被規(guī)定為不會指向window,而是undefined

例如

function func () {
    "user strict"
    console.log("this=", this); // undefined
}
func()

3、構(gòu)造器調(diào)用(被new運算符調(diào)用)

當函數(shù)被new運算符調(diào)用時,該函數(shù)總會返回一個對象。

例如(一般情況)

var obj = function () {
    this.name = "小闊愛";
};
var newObj = new obj();
console.log("newObj.name=", newObj.name); // "小闊愛"

特殊情況:(函數(shù)有返回值的情況)
如果返回值是一個對象,那么this指向的就是那個返回的對象,如果返回值不是一個對象那么this還是指向函數(shù)的實例。(區(qū)分構(gòu)造器是否顯式地返回一個object類型的對象)

例如(不顯式返回object對象)

var obj = function () {
    this.name = "小闊愛";
    return "寶批龍";
};
var newObj = new obj();
console.log("newObj.name=", newObj.name); // "小闊愛"

以及(顯式返回object對象)

var obj = function () {
    this.name = "小闊愛";
    return {
        name: "寶批龍"
    };
};
var newObj = new obj();
console.log("newObj.name=", newObj.name); // "寶批龍"

4、call或apply調(diào)用

跟普通函數(shù)相比,這種方式可以動態(tài)改變傳入函數(shù)的this

例如

var obj1 = {
    name: "小闊愛",
    getName: function () {
        return this.name;
    }
};
var obj2 = {
    name: "寶批龍"
};
console.log("obj1.getName=", obj1.getName()); // "小闊愛"
console.log("obj1.getName.call(obj2)=", obj1.getName.call(obj2)); // "寶批龍"

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

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

相關(guān)文章

  • javascript設(shè)計模式開發(fā)實踐(二)- 封裝和原型模式

    摘要:對象會記住它的原型給對象提供了一個名為的隱藏屬性,某個對象的屬性默認會指向它的構(gòu)造器的原型對象,即。我們通過代碼來驗證再來實際上,就是對象跟對象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語言的對象系統(tǒng)中,封裝數(shù)據(jù)是由語法解析來實現(xiàn)的,這些語言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...

    luxixing 評論0 收藏0
  • JavaScript設(shè)計模式開發(fā)實踐 | 02 - this、call和apply

    摘要:構(gòu)造器的外表跟普通函數(shù)一樣,他們的區(qū)別在于被調(diào)用的方式。即,使用運算符創(chuàng)建對象時,就是將函數(shù)當作構(gòu)造器調(diào)用。本節(jié)內(nèi)容為設(shè)計模式與開發(fā)實踐第二章筆記。 this JavaScript的this總是指向一個對象,至于指向哪個對象,是在運行時基于函數(shù)的執(zhí)行環(huán)境的動態(tài)綁定的,而非函數(shù)被聲明時的環(huán)境。 this的指向 this的指向大致可以分為以下4類: 作為對象的方法調(diào)用 作為普通函數(shù)調(diào)用 ...

    darryrzhong 評論0 收藏0
  • JavasScript重難點知識

    摘要:忍者級別的函數(shù)操作對于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數(shù)是一個很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機制,如果...

    forsigner 評論0 收藏0
  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統(tǒng)的類繼承還要強大。中文指南基本操作指南二繼續(xù)熟悉的幾對方法,包括,,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 怎樣使用 this 因為本人屬于偽前端,因此文中只看懂了 8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...

    blair 評論0 收藏0
  • 前端知識點整理

    摘要:難怪超過三分之一的開發(fā)人員工作需要一些知識。但是隨著行業(yè)的飽和,初中級前端就業(yè)形勢不容樂觀。整個系列的文章大概有篇左右,從我是如何成為一個前端工程師,到各種前端框架的知識。 為什么 call 比 apply 快? 這是一個非常有意思的問題。 作者會在參數(shù)為3個(包含3)以內(nèi)時,優(yōu)先使用 call 方法進行事件的處理。而當參數(shù)過多(多余3個)時,才考慮使用 apply 方法。 這個的原因...

    Lowky 評論0 收藏0

發(fā)表評論

0條評論

王晗

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<