javascript - 如何在Object.defineProperty值标志中访问这个变量?

标签 javascript properties pseudo-class

我正在尝试找到一种方法来初始化属性值,该属性值附加到具有本地化值引用的 JavaScript 伪类的所有实例,而无需手动迭代每个实例,例如以下代码:

function A() {
    this.a = '0';
}

var a = new A();
var b = new A();

document.write(a.a + a.b + a.c + '<BR />');

A.prototype.b = '1';
Object.defineProperty(A.prototype, 'c', {
    writable: true,
    value: (function() { return(this.a + '|'); })()
});

document.write(a.a + a.b + a.c + '<BR />');

b.c = '3';

document.write(a.a + a.b + a.c + '<BR />');
document.write(b.a + b.b + b.c + '<BR />');

输出:

0undefinedundefined
01undefined|
01undefined|
013

但是在期望的条件下会输出:

0undefinedundefined
010|
010|
013

编辑:

为了澄清起见,该值应初始化为通过“this”访问的对象的属性。当属性附加到对象时,不是在 get 或 set 调用中以延迟方式,并且不使用其他本地属性。

最佳答案

您似乎需要一个 getter 函数来动态计算 a 属性的值:

Object.defineProperty(A.prototype, 'c', {
    get: function() {
        return(this.a + '|');
    },
    set: function(x) { // overwritable:
        // create normal property directly on the object (not on the prototype)
        Object.defineProperty(this, 'c', {
            value: x,
            writable: true
        });
    }
});

您当前的代码工作方式类似于

A.prototype.c = (function() { return(this.a + '|'); })(); // IEFE

其中 this 是全局对象,而 a 当然是未定义的。

关于javascript - 如何在Object.defineProperty值标志中访问这个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055418/

相关文章:

javascript - 如何创建动态命名的 JavaScript 对象属性?

css - 如何在 CSS3 中使用伪类创建自定义形状

.net - 命名 bool 属性的良好指南

java - 从属性文件中读取值

jquery - 如何在 Javascript/Jquery 中更改此 css 伪按钮

css - 如何使用:not and :first-child pseudo selectors simultaneously

javascript - 使用 jQuery DateRangePicker 和 Datatable 的多个日期范围过滤器

Javascript 模拟真正的私有(private)变量并使用 getter/setter 管理它

javascript - 使用 ajax 的 jQuery 调用没有响应,没有错误

javascript - 在 GSP 中将数据从 Controller 传递到 JavaScript