gpt4 book ai didi

javascript - 如何在 JavaScript 的构造函数中卡住属性

转载 作者:行者123 更新时间:2023-11-29 19:30:11 27 4
gpt4 key购买 nike

我正在尝试使构造函数中的属性不可变,即不应使用点或括号表示法更改属性。例如。我有我的构造函数:

function OnceNamedOne() {
Object.freeze(this.firstName = 'John');
Object.freeze(this.lastName = 'Doe');
this.fullName = this.firstName + ' ' + this.lastName;
}

我基本上想卡住属性并像在函数中那样硬连接它们的值。所以,当一个实例被创建时:

var me = new OnceNamedOne(); 当我尝试更改属性值时,它应该不起作用 - 即以下不应将“John”分配给名字:me.firstName = 'John';.

我该怎么做?

最佳答案

你不能用原语卡住一个属性,但你可以让它成为 non-writable

Object.defineProperty(this, 'firstname', {
enumerable : false,
configurable : false,
writable : false,
value : 'John'
});

FIDDLE

对于多个属性,做一个方便的函数可能更容易

function createNonWritable(obj, key, value) {
Object.defineProperty(obj, key, {
enumerable : false,
configurable : false,
writable : false,
value : value
});
}

function OnceNamedOne() {
createNonWritable(this, 'firstname', 'John');
createNonWritable(this, 'lastname', 'Doe');
createNonWritable(this, 'fullname', this.firstname + ' ' + this.lastname);
}

FIDDLE

或者如评论中所述,由于属性的默认值为 false,您不必将它们显式设置为该值

function OnceNamedOne() {
Object.defineProperty(this, 'firstname', {value : 'John'});
Object.defineProperty(this, 'lastname', {value : 'Dow'});
Object.defineProperty(this, 'fullname', {value : this.firstname + ' ' + this.lastname});
}

关于javascript - 如何在 JavaScript 的构造函数中卡住属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com