有可能让一个方法像javascript类中的属性一样工作吗?

有可能让一个方法像javascript类中的属性一样工作吗?,javascript,Javascript,以下面一段试图实现类的javascript为例: function aClass(){ this.prop1 = this.getProp1(); } aClass.prototype.getProp1 = function(){ // do some stuff return result; } 我可以这样使用它: var obj = new aClass(); alert(obj.prop1); 我现在想做的是: obj.prop1 = "some value"; 当然,

以下面一段试图实现类的javascript为例:

function aClass(){
  this.prop1 = this.getProp1();
}

aClass.prototype.getProp1 = function(){
  // do some stuff
  return result;
}
我可以这样使用它:

var obj = new aClass();
alert(obj.prop1);
我现在想做的是:

obj.prop1 = "some value";
当然,这会覆盖prop1,我无法再从getProp1函数检索生成的结果

简言之,是否可以创建一个允许读写的属性,但在这两种情况下都调用一个函数来进行验证

我很高兴有一个完全不同的方法,我在这里,只要我得到想要的效果


它需要使用较旧的浏览器。

您可以为对象属性定义getter和setter;见和。语法将与获取或设置属性相同,但代码将运行,而不是哑值更改


兼容性约束:在IE<9中不起作用。

您可以为对象属性定义getter和setter;见和。语法将与获取或设置属性相同,但代码将运行,而不是哑值更改


兼容性约束:在IE<9中不起作用。

假设您不受某些旧JS实现的限制,您可以使用。

假设您不受某些旧JS实现的限制,您可以使用。

jquery不是一个选项,您有没有不使用jquery的示例。我试图修改您的live示例并删除其中的jquery位,但无法使其正常工作。@Graham:我的示例使用jquery只是将按钮和输入字段与属性相关联。您可以完全删除它,然后直接访问属性。是的,我最终让它工作,但不幸的是,它在旧浏览器中不工作。@Graham:在旧浏览器中,这根本不可行。jquery不是一个选项,您有没有不使用jquery的示例。我试图修改您的live示例并删除其中的jquery位,但无法使其正常工作。@Graham:我的示例使用jquery只是将按钮和输入字段与属性相关联。您可以完全删除它,然后直接访问该属性。是的,我最终让它工作,但不幸的是,它在旧浏览器中不工作。@Graham:在旧浏览器中,这根本不可行。