为什么我们在getter和setter函数中返回这个

Why we return this in getter and setter function?

本文关键字:返回 函数 setter 我们 getter 为什么      更新时间:2023-09-26
sap.designstudio.sdk.DataBuffer.subclass("com.sap.sample.jsondatasource.JsonDataSource", function() {
    var that = this;
    var _hasHeaderRow = false;
    var _hasHeaderColumn = false;
    var _csvfile;
    this.init = function() {
        this.defineDimensions([{
            key: "cols",
            text: "City",
            "axis": "COLUMNS",
            "axis_index": 0
        }, {
            key: "rows",
            text: "Date",
            "axis": "ROWS",
            "axis_index": 0
        }], {
            key: "measures",
            text: "Measures",
            containsMeasures: true,
            members: [{
                "key": "measure",
                "text": "Temprature",
                "scalingFactor": 2,
                "formatString": "0.00 EUR;-0.00 EUR"
            }]
        });
    };
    this.csvfile = function(value) {
        if (value === undefined) {
            return _csvfile;
        } else {
            _csvfile = value;
            return this; **//why we using this here?**
        }
    };
    this.hasHeaderRow = function(value) {
        if (value === undefined) {
            return _hasHeaderRow;
        } else {
            _hasHeaderRow = value;
            return this; **//why we using this here?**
        }
    };
    this.hasHeaderColumn = function(value) {
        if (value === undefined) {
            return _hasHeaderColumn;
        } else {
            _hasHeaderColumn = value;
            return this;  **//why we using this here?**
        }
    };

    this.afterUpdate = function() {
      //
    }
});

我对这个getter和setter有疑问。为什么我们在这里用这个?我们能返回值的目的是什么?请大家解释清楚。我已经更新了整个代码。现在有什么建议吗?

这是一个"流畅接口"的例子。

这是什么?例如,如果您有一个foo类的a对象,并且该类的每个方法都返回foo实例,您可以编写

fooInst.do().some().thing()
顺便说一下,许多jQuery方法被实现为流畅的接口,所以这对JS开发人员来说是一个相当熟悉的概念。

在代码示例中,大多数方法只有在传递值时才返回实例。在这种情况下,该方法既可以用作setter,也可以用作getter。

这也类似于jQuery的一些方法,例如:

var foo = $('#elem').attr('class'); // returns element's class, CANNOT be chained
$('#elem').attr('class', 'foo'); // sets class + returns instance, CAN be chained