使对象的所有属性可变

明晰

我如何定义对象的属性,因此,如果其中一个更改,则所有其他属性都会自动更新。

到目前为止,我已经提出了以下代码,但是它不起作用:

function CreateNamed(first, last) {
    Object.defineProperties(this, {
           "firstName": {
            value: first,
            writable: true
        },
            "lastName": {
            value: last,
            writable: true
        },
            "fullName": {
            value: first + ' ' + last,
            writable: true
        }
    });
}

因此,在创建新对象之后,可以对其进行适当的更改:

var b = new CreateNamed('Bill', 'Gates'); // Bill Gates
b.firstName = 'Paul'; // b.fullName = Paul Gates
b.lastName = 'Wood'; // b.fullname = Paul Wood
b.fullName = 'Chuck Norris' // b.firstName = Chuck, b.lastName = Norris
米加尔

value不是动态计算的。它不会随着对象的改变而改变。为了动态计算属性,您需要使用getset定义getter和setter

get
一个用作该属性的吸气剂的函数,如果没有吸气剂,则为undefined。函数返回值将用作属性的值。默认为未定义。

set
用作属性设置器的函数,如果没有设置器,则为undefined。该函数将仅将分配给属性的新值作为参数。默认为未定义。

function CreateNamed(first, last) {
    this.first = first;
    this.last = last;
    Object.defineProperties(this, {
           "firstName": {
           get: function() { return this.first; },
           set: function(name) { this.first = name; }
        },
            "lastName": {
           get: function() { return this.last; },
           set: function(name) { this.last = name; }
        },
            "fullName": {
            get: function () { return this.first + ' ' + this.last },
            set: function (name) {
              if (!name.match(/^[a-z]+ [a-z]+$/))
                throw new Error('I cannot parse that name')
              var parts = name.split(' ')
              this.first = parts[0];
              this.last = parts[1];
            }
        }
    });

}

var user = new CreateNamed('bob', 'smith');
document.write(user.fullName); // bob smith

user.firstName = "john"; 
document.write(user.fullName); // john smith

user.fullName = "tony brian";
document.write(user.firstName); // tony
document.write(user.lastName); // brian

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使对象的所有属性可变

来自分类Dev

从...可变深度对象的子对象的所有子对象中获取属性

来自分类Dev

从...可变深度对象的子对象的所有子对象中获取属性

来自分类Dev

具有可变对象的自动属性

来自分类Dev

转义对象的所有属性

来自分类Dev

Java-对可变对象的可变引用-将更新对象的字段对所有线程可见

来自分类Dev

所有不可变对象都可重用吗?

来自分类Dev

从所有者对象读取时可变的自我

来自分类Dev

Ada:具有可变大小数组属性的对象

来自分类Dev

更新MongoDb中对象的所有属性

来自分类Dev

如何打印对象的所有属性

来自分类Dev

获取所有属性java对象

来自分类Dev

获取对象的所有属性的列表

来自分类Dev

为所有对象属性设置原型

来自分类Dev

列出Javascript对象的所有原型属性

来自分类Dev

Rails验证对象中的所有属性

来自分类Dev

显示对象所有属性的全名

来自分类Dev

Vuex监视所有对象子属性

来自分类Dev

如何找到COM对象的所有属性?

来自分类Dev

获取对象的所有属性的列表

来自分类Dev

为所有对象属性设置原型

来自分类Dev

从对象中获取所有属性,包括引用成员的属性

来自分类Dev

如何遍历对象的所有属性并删除特定属性 AngularJS

来自分类Dev

从对象数组获取所有唯一的对象属性

来自分类Dev

javascript对象属性适用于所有对象

来自分类Dev

减少对象数组并返回对象的所有原始属性

来自分类Dev

具有可变字段的不可变对象

来自分类Dev

所有对象属性都有不同的键,但类型相同

来自分类Dev

所有值对象都应该是不可变的