Javascript 为js对象分配setter/getter

Javascript 为js对象分配setter/getter,javascript,setter,Javascript,Setter,我试图为我的js“类”分配一个setter: 但它抛出了SyntaxError:missing;在联机设置a(b){之前,有人能告诉我正确的语法是什么吗?有几种方法可以做到这一点 构造函数和Object.defineProperty 要在构造函数中执行此操作,可以使用Object.defineProperty或Object.defineProperties。例如: function Testing(){ this.value = "content"; Object.defineP

我试图为我的js“类”分配一个setter:


但它抛出了
SyntaxError:missing;在联机
设置a(b){
之前,有人能告诉我正确的语法是什么吗?

有几种方法可以做到这一点

构造函数和
Object.defineProperty
要在构造函数中执行此操作,可以使用
Object.defineProperty
Object.defineProperties
。例如:

function Testing(){
    this.value = "content";
    Object.defineProperty(this, "a", {
        set: function(b){
            this.value = b;
        }
    });
}
现场示例

功能测试(){
this.value=“content”;
Object.defineProperty(这是“a”{
集合:功能(b){
这个值=b;
}
});
}
var t=新测试();
log(“t.value在:+t.value之前”);
t、 a=“新内容”;
snippet.log(“t.value之后:”+t.value);

在这样的示例中,集合需要是对象的一部分:

一种方法是:

function testing(){
    var value = "content";
    return {
        set a(b){
            value = b;
        },
        get a() {
            return value;
        }
    };
}
var test1 = new testing();
test1.a = "nope";

尝试使用
对象。defineProperty
在非构造函数中使用
new
没有任何意义。
new
来自OP。是的,但OP的函数是构造函数。你的不是。是的,但OP最初的问题是关于getter和setter;-)@garryp我感谢你的帮助,是的有点超出范围,但我对此表示感谢:)感谢您和@garryp的响应!这两种方法都有效,但其中一种是更好的方法?@Feirell:两者都不好。构造函数和生成器函数(garryp向您展示的名称)是使用JavaScript的非常有效的方法。请注意,对于garryp这样的构建器函数,您不使用
new
(他似乎不愿意更正他的答案;我放弃了)。garryp答案中的方法的一个小缺点是,您无法为对象分配原型(对象的基础对象,具有公共功能),这通常很方便。您可以使用构造函数或
对象。创建
,但不能使用他显示的模式。@Feirell:我在上面的第三个位置添加了第四个示例。请欣赏。:-)Corwder好的,老实说,我不知道你的意思,你在他的回答的评论部分写道,现在使用
new
关键字已经不合适了,但是为什么?当我使用你的对象定义模式时,我如何从“类”中创建多个对象?你太棒了,我非常感谢你的努力。如果我没记错的话,你在我过去遇到的一些问题上帮了我,每次你给自己制造这么多麻烦,我认为这不是正常的事情,所以我想说声谢谢!一个小问题,为什么我必须在前面使用
对象
对于
.defineProperty
?如果我像第一个示例中使用的那样使用这种符号样式,会不会有问题?比如它是一种不好的还是不常见的样式?
function testing(){
    var value = "content";
    return {
        set a(b){
            value = b;
        },
        get a() {
            return value;
        }
    };
}
var test1 = new testing();
test1.a = "nope";