2013-05-13 106 views
4

我試圖理解下面的代碼:'this'的價值是什麼?

var MyModel = function (folders) { 
    var thisType = this; 

    this.callType = ko.computed({ 
     read: function() { 
      return "openLink"; 
     }, 
     owner: this 
    }); 

爲什麼集 'thisType' 到 '這個'?

http://knockoutjs.com/documentation/computedObservables.html

「管理‘這個’ 閱讀文檔如果你想知道到ko.computed第二個參數是什麼(我們在前面的代碼通過此位),定義在評估計算出來的observable的時候,這個值是不存在的,如果不傳入,就不可能引用this.firstName()或this.lastName()。有經驗的JavaScript編程人員會認爲這很明顯,但如果你仍然瞭解JavaScript似乎有些奇怪(像C#和Java這樣的語言從來不希望程序員爲此設置一個值,但JavaScript會這樣做,因爲它的函數本身不是默認情況下的任何對象的一部分)。「

'this'是頁面對象嗎?

+1

也許這個變量在下面的某個地方使用......向我們展示整個代碼!如果沒有,你可以省略它。 – Bergi 2013-05-13 11:50:53

+0

['this''](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this)是一個特殊的關鍵字,它是指「上下文」,並取決於函數是如何調用。在'new MyModel()'中,例如它就是實例。 – Bergi 2013-05-13 11:52:49

+0

[JavaScript「this」關鍵字]的可能重複(http://stackoverflow.com/questions/3127429/javascript-this-keyword) – 2013-05-13 11:52:52

回答

3

我很高興你問了這個問題。 我喜歡把自己想象成一個經驗豐富的js程序員,但當我在淘汰賽的js文檔中遇到這個問題時,我仍然做了兩次嘗試。

爲什麼將thistype設置爲這個?

當調用外部函數時,您可能仍然需要訪問this引用的對象。通過使用閉包,可以將this保存爲父函數中的變量。

我能想到的最好的例子是onclick事件。

<div id="test">content</div> 

document.getElementById("test").onclick = function(e){ 
    var self = this; 

    function test(){ 
     alert(this); //[object Window] 
     alert(self); //[object HTMLDivElement] 
    } 
    test(); 
}; 

是 '本' 的頁面對象?

正如其他人指出的,關於此關鍵字有很多documentation

3

在JS 這個指上下文執行

我喜歡quirksmode.org此摘錄:

在JavaScript中這始終是指我們 執行功能的「所有者」,或者更確切地說,是函數是一個方法的對象。 當我們在一個頁面中定義我們的忠實函數doSomething()時,它的所有者是頁面,或者更確切地說,是JavaScript的 的窗口對象(或全局對象)。但是,onclick屬性歸屬於它所屬的HTML元素 。

因此,在您的示例中,這將具有MyModel在實例化時的上下文的值。