2017-03-15 48 views
1

所以我的問題是當在方法中使用對象字面量時我看到人們在做'this.something = ...'在對象字面量中調用了什麼?

然後在整個對象中引用它。這是什麼名字?

例如,在下面的例子中,如果你看'CacheDom'方法'this.button = document.getElementById('submit')'給了我們一個參考,我們可以在以後使用。

我理解'this'關鍵字的基礎知識,並且在一個對象內部它會引用該對象,但是我發現能夠存儲元素等並且稍後參考它們是很奇怪的。

基本上這是什麼官方術語?

感謝

https://jsfiddle.net/rvs6ymqj/

HTML

<body> 
    <button id="submit" type="submit">Submit</button> 
</body> 

JS

var obj = { 
    init: function() { 
    this.cacheDom(); 
    this.bindEvents(); 
    }, 

    cacheDom: function() { 
    this.button = document.getElementById('submit'); 
    }, 

    bindEvents: function() { 
    this.button.addEventListener("click", function() { 
     console.log("we clicked the button"); 
    }) 
    } 
} 

obj.init(); 
+0

面向對象的編程? –

+1

'this'的官方稱謂是「this」。有些人說「背景」,這不是官方的或精確的。更正確的可能是「接收者」,但這也不是官方的。 *「但我覺得很奇怪,是能夠存儲元素等,後來引用它們」 *如果值'this'是一個對象(它不必是),那麼你只是指定屬性的對象。這與使用'obj'而不是'this'不同,'obj.foo = 42;'(如果'obj'指向一個對象)。 –

+0

嘿,是的,當你說'把屬性賦值給一個對象'時它是有意義的。我認爲這是因爲我習慣於總是使用冒號定義我的屬性,而不是像這樣添加它們。 謝謝! –

回答

1

它從語言不同語言。在Javascript中,它被稱爲property。在Java中,它們是fields。 C++也會將它們稱爲字段,但它們也可能被稱爲data members

JS與其他兩個有着明顯的不同,因爲Java和C++強制你聲明你的字段,而JS成員是在動態定義的。真的,JS對象只是從鍵到值的映射:屬性是鍵。

1

在面向對象編程中,「this」指的是你內部的對象。您不在「this」中存儲屬性。它是區分全局變量/構造函數參數和同名實例變量的一種方法。我不認爲對的「這個」,但是這句話概括起來很好的概念有一個特定的名稱:

「這」通常是不可變的引用或指針是指當前對象

https://en.wikipedia.org/wiki/This_(computer_programming)

Javascript的專項說明:

的JavaScript

當在任何函數外部使用時,在全局空間中,這指的是封閉對象 ,在這種情況下,它是封閉的瀏覽器窗口,即窗口對象 。當在全局空間 中定義的函數中使用時,這個關鍵字所指的內容取決於調用的函數如何被調用 。當直接調用這樣的函數時(例如f(x)),這將返回到定義該函數的全局空間,以及其中可能存在其他全局函數和變量的 (或 嚴格模式,它是未定義的)。然而,如果一個包含這個函數的全局函數被 作爲文檔 對象中元素的事件處理程序的一部分調用,那麼這將引用調用的HTML元素。當 方法是使用新的關鍵字被稱爲(例如無功C =新事物())內的事情然後 這指的是Thing對象本身。當一個函數 附着作爲對象的屬性,並呼籲作爲 對象的方法(例如obj.f(X)),這將參照該 功能被包含內的對象。它甚至可以在調用時的功能,通過使用.CALL()或。適用()函數對象的 方法手動 指定。例如,方法調用 obj.f(x)也可以寫爲obj.f.call(obj,x)。要解決 這個在嵌套函數(如DOM事件 處理程序)中的不同含義,在JavaScript中將調用對象的此引用保存在變量中(通常稱爲該變量或 self),然後使用該變量引用 嵌套函數中的調用對象。

相關問題