2015-06-15 26 views
2

我對js來說比較新,基本上我在transport.js這個小動畫庫中遇到了下面的函數。看看下面的功能:瞭解一個簡單的return.js

function Transform(str) { 
    if (typeof str === 'string') { this.parse(str); } 
    return this; 
    } 

現在this.parse(str),基本上調用其連接到Transform的原型溫控功能,你可以看到LINE 422該功能。

現在我在這裏的問題是關於this,我已經在線閱讀了一些文章,其中顯示瞭如何返回這可用於鏈接,但我不確定在這種情況下返回這個返回。

當你在這個特定場景中說return this時,你特別想要返回什麼?究竟是什麼。

我有點明白,回報這個工作有點像這樣:

  • 你傳遞一個對象,變量或東西的功能
  • 功能執行步驟
  • 返回新對象或使用return this進行變量。

但是我仍然不清楚,有人通過我的例子並使用示例上下文來解釋我的晶體嗎?

P.S.我不是要求解釋返回這個,但我要求解釋在給定的上下文中返回這個。

回答

3

this.parse(str)最有可能使對象發生變異並返回現在發生變異的結果。這是有用的,像你說的,爲chaining function calls像這樣:

var obj = Transform('some string').someOtherFunction(); 

someOtherFunc可以某處prototype chain來定義,或者使用某種inheritance strategy,也可能是另一種「父」繼承或擴展功能目的。重點在於,當調用someOtherFunc時,會調用已由Transform函數更改的對象。

2

在該上下文中進行轉換是可以實例化的對象。一旦實例化,它就擁有自己的屬性和自己的生命週期。這是在聲明中使用單詞function時javascript不清楚的地方。 (相對於這種用法,ES6帶來了許多更好的解決方案)。

var transform1 = new Transform("transform1"); 
var transform2 = new Transform("transform2"); 

現在可以單獨使用transform1和transform2來調用Transform對象的所有子方法。

轉換函數可以看作是一個「構造函數」(雖然它不是在javascript中使用類的官方方式)。沒有return this,transform1和transform2將是未定義的。它在這裏更多地用於保持新創建的對象的引用而不是真正的鏈接,其中更多的是使用子方法來做類似的事情:

transform1.submethod1().submethod2();