2012-01-06 39 views
2

我與一些高級JavaScript人員合作,他們在他們的代碼中使用了SUPER關鍵字。我承認,我沒有很好地理解如何以及爲什麼可以使用它。如何以及爲什麼要在代碼中使用SUPER?

有人可以指導我或告訴我如何熟悉它的使用和推理嗎?

下面是一些例子:

openup: function($super) { 
    $super(); 
    this.shop.enable_access(); 
} 



addLeft: function(data) { 
    var cell = Element('td'); 
    if (data.item_data) { 
     var item = new SRIL(data.item_data); 
     item.attach(cell); 
     item.show(); 
    } 

    return cell; 

}

var SRIL = Class.create(Module, { 
initialize: function($super, data) { 
    $super({ dom: 'show_line' }); 
    this.data = data; 
    if (data.Type[0] == 'Car') { 
     //some code 
    } 
    else { 
     // some code 
    } 
} 

});

+1

你是指'SUPER'還是'super'?案件事宜。 – 2012-01-06 22:34:26

+1

'$ super'改變了一切 - 它不是一個關鍵字,而只是一個變量。 – pimvdb 2012-01-06 22:39:23

+2

它看起來像這個代碼是建立在Prototype.js框架上的:http://www.prototypejs.org/learn/class-inheritance – 2012-01-06 22:46:36

回答

2

JavaScript沒有這樣的事情。

更新:您應該查看此處使用的庫的文檔。這是一個圖書館功能,而不是一種語言。

+3

它是[保留的未來關鍵字](http://es5.github。 com /#x7.6.1.2),所以它確實擁有它。不過,我不知道是否有任何實現使用它。 – pimvdb 2012-01-06 22:26:38

+0

是不是可以在JS中創建類並將它們作爲SUPER類繼承?認爲我在咖啡標記中看到了類似的東西。 – 2012-01-06 22:29:26

+0

@Alex M:這是可能的,但前提是您自己使用原型實現它,而不是使用JavaScript本身。這個問題看起來像是一個Java問題。 – copy 2012-01-06 22:31:53

1

由於Javascript沒有經典繼承,而是根據原型/功能模型進行結構化,開發人員在重新創建經典模型方面進行了各種嘗試。 super是這種策略的一部分。它解決的特定問題是子對象具有相同的方法 - 即使它只是構造函數 - 作爲父對象。在不創建super作爲父級方法的別名的情況下,訪問這些方法變得有些麻煩(並且在某些情況下不可能)。

John Resig有一個wrapper顯示這很好。請注意他在第一個示例中使用_super()來調用父對象的舞蹈方法。

+0

我添加了一些我在代碼中看到的例子,以供您參考它的用法。 – 2012-01-06 22:37:38

+0

在這些情況下,開發人員可能直接使用'$ super'來引用父級方法。換句話說,我假設'$ super'是指在第一個例子中稱爲'open_up'的父方法,在第二個例子中稱爲父類'initialize'方法。 – glortho 2012-01-06 22:42:54

相關問題