JavaScript允许getter和setter吗?

时间:2010-08-02 00:02:18

标签: javascript properties

这是我的代码:

<script type="text/javascript">
var Note=function(){}
Note.prototype = {
    get id()
    {
        if (!("_id" in this))
            this._id = 0;
        return this._id;
    },

    set id(x)
    {
        this._id = x;
    }
}

var a=new Note()
alert(a.id)
</script>

这种风格就像是python,

这是我第一次看到这段代码,

你可以在javascript中给我更多关于'get'和'set'的例子。

感谢

4 个答案:

答案 0 :(得分:10)

是的。 ECMAScript 5中添加了此功能。

PropertyAssignment:
    PropertyName : AssignmentExpression 
    get PropertyName() { FunctionBody } 
    set PropertyName( PropertySetParameterList ) { FunctionBody } 

使用此语法时,请记住以下几点。

  1. 如果您的对象文字具有值属性,则它不能具有getter或setter,反之亦然。
  2. 您的对象文字不能有多个具有相同名称的getter或setter。
  3. 实际使用此功能的更好方法是通过Object.defineProperty功能。

    function Person(fName, lName) {
        var _name = fName + " " + lName;
        Object.defineProperty(this, "name", { 
            configurable: false, // Immutable properties!
            get: function() { return _name; } 
        });
    }
    

    这允许您使用封装来获得漂亮的干净对象。

    var matt = new Person("Matt", "Richards");
    console.log(matt.name);  // Prints "Matt Richards"
    

答案 1 :(得分:6)

它可以在某些引擎中,并且它在EcmaScript 5的规范中,因此它将来应该被更广泛地采用。 Compatibility Table并未直接解决此问题,但可能会遵循defineProperties,它提供了执行相同操作的API。如前所述,John Resig有一个很好的article on the new object and property APIs

答案 2 :(得分:3)

Javascript实际上支持getter和setter。 John Resig有一篇关于他们的好文章here

John的文章很好地提到了在Javascript对象上定义getter / setter的几种不同方法,但没有很好地描述每种方法何时适用。我相信罗伯特·尼曼在最近的一篇博文中更有效地完成了这项工作:

Getters and setters with JavaScript

(本文还介绍了ECMAScript标准Object.defineProperty

答案 3 :(得分:0)

是的,它可以。这是来自jQuery的创建者John Resig的一篇很好的帖子:

JavaScript Getters and Setters