gpt4 book ai didi

javascript - JS getters : does defineProperty replace or complement the older, inline 'get' 'set' 语法?

转载 作者:行者123 更新时间:2023-11-30 08:04:57 25 4
gpt4 key购买 nike

内联、对象文字“get function()”样式和 Object.defineProperty 之间的功能似乎有重叠。

获取 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get 的 MDN 文档不要提及内联“get”函数已被弃用。

    var john = {
firstName: 'John',
lastName: 'Smith',
age: 21,
gender: 'Male'

// () → String
// Returns the full name of object.
get name() {
return this.firstName + ' ' + this.lastName
},

// (new_name:String) → undefined
// Sets the name components of the object,
// from a full name.
set name(new_name) {
var names = new_name.trim().split(/\s+/)
this.firstName = names['0'] || ''
this.lastName = names['1'] || ''
},
}

Mozilla 的 Jeff Walden 在(似乎是)2010 年发表的这篇文章指出:

“我们已经删除了对 SpiderMonkey 和 Mozilla 中一些过时的 getter/setter 语法的支持。这不包括 { get property() { return "value"; }, set property(v) { } },它被广泛使用并且是最新标准的一部分。”

所以:

  • 内联获取/设置是否正常?
  • 是否弃用了内联 get/set 以支持 defineProperty?
  • 我应该什么时候使用它们?

最佳答案

  • 内联获取/设置都可以
  • 如果支持 defineProperty,它们不会被弃用(__defineGetter____defineSetter__ 被弃用)
  • defineProperty 为您提供更多粒度和对您要定义的属性的控制:您可以决定该属性是否可配置可写可枚举。您不能使用 getset 来做到这一点。此外,使用 defineProperty,您无法定义必要的 getter 或 setter,而只是一个值。
  • 在不需要更多粒度时使用getset,这是一种糖语法,可以在对象定义本身中使用,其中defineProperty 必须在创建实例后使用。当您需要更多粒度时,或者您不需要指定 getter 和 setter 而只是一个值时,请使用 defineProperty

希望对您有所帮助。

关于 getset 规范的链接

ES5:http://www.ecma-international.org/ecma-262/5.1/#sec-11.1.5

ES6(草案):http://people.mozilla.org/~jorendorff/es6-draft.html#sec-method-definitions-static-semantics-propname

关于javascript - JS getters : does defineProperty replace or complement the older, inline 'get' 'set' 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564239/

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