这是我的代码:
<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'的例子。
感谢
答案 0 :(得分:10)
是的。 ECMAScript 5中添加了此功能。
PropertyAssignment: PropertyName : AssignmentExpression get PropertyName() { FunctionBody } set PropertyName( PropertySetParameterList ) { FunctionBody }
使用此语法时,请记住以下几点。
实际使用此功能的更好方法是通过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的一篇很好的帖子: