2012-02-23 34 views
5
var problemtest = function() { 

    var parameters; 

    return function (parameters) { 
     parameters = parameters; 
    } 
} 

var mysolutiontest = function() { 

    var parameters; 

    return function (parametersIn) { 
     parameters = parametersIn; 
    } 
} 

這更像是一個JavaScript約定問題。JavaScript約定:如何爲父範圍指定參數

通常我的代碼與上面類似。函數接受參數並將其分配給父範圍。但是,我不能像problemtest那樣使用它,因爲參數parameters隱藏parametersproblemtest

在OO編程中,我們可以使用this,但在JavaScript中我不能使用this,所以我通常實現類似於mysolutiontest的解決方案。但是,我對這個解決方案並不完全滿意。有沒有更好的方法來做到這一點?

回答

2

我通常使用_parameters作爲慣例。這源於我的Java過去。這不是孤立於你的例子或Javascript。任何不強制您限定任何封閉範圍變量的語言都會導致您遇到同樣的問題。

var mysolutiontest = function() { 
    var _parameters; 

    return function (parameters) { 
    _parameters = parameters; 
    } 
} 

我也看到了人們使用p_parameters質量函數的參數名稱。這不是我最喜歡的東西之一。

var mysolutiontest = function() { 
    var parameters; 

    return function (p_parameters) { 
    parameters = p_parameters; 
    } 
} 

我的2c。

4

如果你的功能需要共享一些屬性,然後將其分配給一個對象是一個優雅的,共同的模式:如何「這個」對象內工作

var object = { 

    property: ['item'], 

    methodOne: function() { 
     console.log(this.property); 
    }, 

    methodTwo: function() { 
     console.log(this.property); 
    } 

}; 

object.methodOne(); // ['item'] 
object.methodTwo(); // ['item'] 

如需進一步信息 - http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/

+0

+1,但您應該指出,使用'this.property'可能會導致不熟悉JS對象工作方式的意外行爲。例如:使用'object.methodOne'作爲事件處理程序。 – 2012-02-23 00:30:18

+0

同意。已編輯並添加了Angus Croll關於主題 – 2012-02-23 00:33:48

+0

@LiorCohen -' <... onclick =「function(){object.methodOne();}」...>'的優秀帖子。 – RobG 2012-02-23 01:22:06