第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“this”關(guān)鍵字在函數(shù)中是如何工作的?

“this”關(guān)鍵字在函數(shù)中是如何工作的?

慕勒3428872 2019-06-03 16:19:28
“this”關(guān)鍵字在函數(shù)中是如何工作的?我剛剛在JavaScript中遇到了一個有趣的情況。我有一個類,它的方法是使用對象-文字表示法定義幾個對象。在這些對象中,this指針正在使用。根據(jù)程序的行為,我推斷this指針指的是調(diào)用方法的類,而不是文本創(chuàng)建的對象。這似乎是武斷的,雖然這是我希望它的工作方式。這是定義的行為嗎?跨瀏覽器安全嗎?是否有任何理由解釋為什么它超出了“規(guī)范”的范圍(例如,它是某個更廣泛的設(shè)計決策/哲學(xué)的結(jié)果)?壓縮代碼示例:// inside class definition, itself an object literal, we have this function:onRender: function() {     this.menuItems = this.menuItems.concat([         {             text: 'Group by Module',             rptletdiv: this         },         {             text: 'Group by Status',             rptletdiv: this         }]);     // etc}
查看完整描述

3 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

從我的另一個崗位上吃人,這比你想知道的還要多這,這個.

在我開始之前,最重要的是記住Javascript,并且在沒有意義的時候重復(fù)一遍。JavaScript沒有類(ES6)class句法糖)。如果什么東西看起來像一個類,這是一個聰明的伎倆。JavaScript對象功能..(這并不是100%的精確性,函數(shù)只是對象,但有時將它們看作單獨的事物是有幫助的)

這個這,這個變量被附加到函數(shù)中。每當你調(diào)用一個函數(shù),這,這個的值,這取決于調(diào)用函數(shù)的方式。這通常被稱為調(diào)用模式。

在javascript中有四種調(diào)用函數(shù)的方法。您可以將該函數(shù)作為方法,作為功能,作為構(gòu)造器,與應(yīng)用.

作為一種方法

方法是附加在對象上的函數(shù)

var foo = {};foo.someMethod = function(){
    alert(this);}

當作為方法調(diào)用時,這,這個將綁定到函數(shù)/方法所屬的對象。在本例中,這將綁定到foo。

作為A函數(shù)

如果您有獨立功能,則這,這個變量將綁定到“全局”對象,幾乎總是窗戶對象在瀏覽器的上下文中。

 var foo = function(){
    alert(this);
 }
 foo();

這可能就是你被絆倒的原因但不要難過。許多人認為這是一個糟糕的設(shè)計決策。由于回調(diào)是作為函數(shù)調(diào)用的,而不是作為方法調(diào)用的,這就是為什么您將看到似乎不一致的行為。

很多人通過做這樣的事情來解決這個問題

var foo = {};foo.someMethod = function (){
    var that=this;
    function bar(){
        alert(that);
    }}

定義一個變量那,那個指向這,這個..關(guān)閉(一個主題本身的)保持那,那個因此,如果您調(diào)用BAR作為回調(diào),它仍然有一個引用。

注:在use strict模式如果用作函數(shù),this不一定是全球性的。(是的)undefined).

作為一個建設(shè)者

還可以調(diào)用函數(shù)作為構(gòu)造函數(shù)?;谀褂玫拿s定(TestObject),這也是也許是你在做的事,也是你被絆倒的原因.

使用新關(guān)鍵字作為構(gòu)造器調(diào)用函數(shù)。

function Foo(){
    this.confusing = 'hell yeah';}var myObject = new Foo();

當作為構(gòu)造函數(shù)調(diào)用時,將創(chuàng)建一個新對象,并且這,這個會被綁在那個物體上。同樣,如果您有內(nèi)部函數(shù)并將它們用作回調(diào),則將它們作為函數(shù)調(diào)用,并且這,這個將被綁定到全局對象。使用這個=這個技巧/模式的變量。

有些人認為構(gòu)造函數(shù)/新關(guān)鍵字是Java/傳統(tǒng)OOP程序員創(chuàng)建類似類的一種方法。

應(yīng)用方法

最后,每個函數(shù)都有一個名為“Apply”的方法(是的,函數(shù)是Javascript中的對象)。應(yīng)用程序可以讓您確定這,這個也允許您傳遞一個參數(shù)數(shù)組。這是一個無用的例子。

function foo(a,b){
    alert(a);
    alert(b);
    alert(this);}var args = ['ah','be'];foo.apply('omg',args);


查看完整回答
反對 回復(fù) 2019-06-03
?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊

這是定義的行為嗎?跨瀏覽器安全嗎?

是。而且是的。

有什么理由可以解釋為什么它是這樣的.

意義this很容易推斷出:

  1. 如果

    this

    在構(gòu)造函數(shù)中使用,并使用

    new

    關(guān)鍵詞,

    this

    引用將要創(chuàng)建的對象。

    this

    即使在公開的方法中也會繼續(xù)意味著目標。
  2. 如果

    this

    在其他任何地方使用,包括嵌套的

    受保護

    函數(shù),它引用全局范圍(在瀏覽器中是窗口對象)。

第二種情況顯然是設(shè)計缺陷,但是通過使用閉包可以很容易地解決這個問題。


查看完整回答
反對 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 515 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號