国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS面向對象之三【this】 (對象和函數之間的關系)

roland_reed / 748人閱讀

摘要:實際上就是做了這樣一件事情顯式的指定是回顧一下隱式模式顯示模式觀點里所有函數都接受個參數第一個第二個是函數被調用時一定會有這個參數如果你用調用函數就是顯式的傳遞和如果你用語法直接調用函數那就去幫你偷偷的傳遞。

JS面向對象之三【this】 (對象和函數之間的關系)

上一篇,談了對象和對象的關系,現在我們談談對象和函數的關系

先說結論,也就是觀點1

觀點1: JS里函數和對象沒有關系,JS之父通過this將他們強行關聯起來

首先我們根據場景,去理解this的出現可以解決什么問題。

    var obj = {
        name : "ziwei",
        sayName: function(x){
            return console.log("hello," + x.name)
        }
    }
   

現在我們不用this,我們就只能這樣調方法
obj.sayName(obj)

但是一般而言,我們用obj調用sayName,肯定就是希望讓這個對象說自己的名字

為了能夠obj.sayName(),讓這個obj自己的傳遞進去,JS之父發明了this.

this的出現,就可以解決obj.sayName(obj)時,不用自己傳遞obj進去,而是直接obj,sayName(),讓JS會幫你傳遞obj參數進去

你可以理解為JS做了一件事情,就是你每次調用函數時,都偷偷給你傳遞了一個參數,你用this就可以拿到這個參數。

    var obj = {
        name : "ziwei",
        sayName: function(){
            return console.log("hello," + this.name)
        }
    }
    obj.sayName()   

但是這樣,其實對于新手很不友好。我obj.sayName(),根本沒傳遞參數,那他是怎么輸出obj的name的呢?

所以JS偷偷的傳遞this參數這件事情,我們將它顯式的展出來就好理解了。

實際上,JS就是做了這樣一件事情,顯式的指定this是obj. obj.sayName.call(obj)

回顧一下:

隱式模式: obj.sayName()
顯示模式: obj.sayName.call(obj)

觀點2: JS里所有函數都接受2個參數,第一個this,第二個是arguments

JS函數被調用時,一定會有這2個參數

如果你用call()調用函數,就是顯式的傳遞this和arguments
如果你用()語法直接調用函數,那JS就去幫你偷偷的傳遞this。它怎么幫你傳遞呢? 這個問題暫時不管,下面會說。

JS其實為了用this,想了很多折中方案。
包括(1)函數調用有兩種語法 , 把函數的參數劃分為this和arguments

一個三段論

論點1: JS函數的參數的值,只有在傳參時才確定的

論點2: this是函數的參數

推論: this的值,只有在函數調用時才確定

JS偷偷幫你傳遞參數的規則 (也就是你使用()語法調用時)

在全局作用域下調用函數,默認是window (這個是歷史遺留bug),或者你也可以理解為window對象調用的函數

哪個對象調用的,這個this就指向誰

構造函數里this指向構造函數的實例

call、apply、bind都是顯式的傳遞this了,不用多說

箭頭函數里沒有this,如果你非要寫一個this,那這個this跟外面的this一致

做幾個題目
這個this是誰?
function a(){
    console.log(this)
}

答案: 不確定,this是參數,函數沒有調用,怎么確定參數的?
function a(){
    "use strict"
    console.log(this)
}

a()

答案: undefined, 嚴格模式下, 全局作用域下this不再是window,而是undefiend

新手不會this的主要原因,是不清楚函數的另一個調用方式call(),

因為用call()就是自己傳遞this, 用()就是JS偷偷幫你傳遞this,既然是JS按照他自己的規則,偷偷給你傳遞的,你肯定要懵逼搞不清的

就像手動檔和自動擋開車一樣

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92413.html

相關文章

  • 模型高級特性,引入模型關聯關系

    摘要:創建模型并設置關聯關聯關系設置模型關系一個對應多個,一個對應多個。手動在中增加關聯關系。并且是實現了數據表之間的關聯關系,比如一個對應多個,如下圖。 文章來源:模型高級特性,引入模型關聯關系 接著前面五篇: 環境搭建以及使用Ember.js創建第一個靜態頁面 引入計算屬性、action、動態內容 模型,保存數據到數據庫 發布項目,加入CRUD功能 從服務器獲取數據,引入組件 前言 ...

    raise_yang 評論0 收藏0
  • JavaScript學習總結(二)數組對象部分

    摘要:屬性是一個值或一組值以數組或對象的形式,是對象的成員。可以使用內置構造函數和創建包裝對象。因此下面的代碼將會使人很迷惑結果結果,此數組長度為應該盡量避免使用數組構造函數創建新數組。給數組對象添加返回數組中最大元素值的方法。 對象部分 Object類型 Object 是一個無序的集合,可以存放任意類型對象,所有其他對象都繼承自這個對象。創建Object類型有兩種,一種是使用new運算符,...

    Lsnsh 評論0 收藏0

發表評論

0條評論

roland_reed

|高級講師

TA的文章

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