HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
当尝试设置属性时,set 语法将对象属性绑定到要调用的函数。它还可以在类中应用。
set
const language = { set current(name) { this.log.push(name); }, log: [], }; language.current = "EN"; language.current = "FA"; console.log(language.log); // Expected output: Array ["EN", "FA"]
{ set prop(val) { /* … */ } } { set [expression](val) { /* … */ } }
prop
要绑定到给定函数的属性名。
val
用于保存尝试分配给prop的值的变量的一个别名。
从 ECMAScript 2015 开始,还可以使用一个计算属性名的表达式绑定到给定的函数。
在 javascript 中,如果试着改变一个属性的值,那么对应的 setter 将被执行。setter 经常和 getter 连用以创建一个伪属性。不可能在具有真实值的属性上同时拥有一个 setter 器。
使用 set 语法时请注意:
{ set x(v) { }, set x(v) { } }
{ x: ..., set x(v) { } }
这将定义一个对象 language 的伪属性current,当current被分配一个值时,将使用该值更新log:
language
current
log
const language = { set current(name) { this.log.push(name); }, log: [], }; language.current = "EN"; console.log(language.log); // ['EN'] language.current = "FA"; console.log(language.log); // ['EN', 'FA']
请注意,current属性是未定义的,访问它时将会返回 undefined。
undefined
delete
我们可以使用delete操作符移除 setter。
delete language.current;
defineProperty
我们可以随时使用 Object.defineProperty() 给一个已经存在的对象添加一个 setter。
Object.defineProperty()
const o = { a: 0 }; Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; }, }); o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property console.log(o.a); // 5
const expr = "foo"; const obj = { baz: "bar", set [expr](v) { this.baz = v; }, }; console.log(obj.baz); // "bar" obj.foo = "baz"; // run the setter console.log(obj.baz); // "baz"
Enable JavaScript to view this browser compatibility table.
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()