1

インラインのオブジェクト リテラル 'get function()' スタイルと Object.defineProperty の間で機能が重複しているようです。

get 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 を支持してインライン get/set は非推奨ですか?
  • それぞれをいつ使用する必要がありますか?
4

1 に答える 1

7
  • インライン get/set は問題ありません
  • defineProperty( __defineGetter__and __defineSetter__are deprecated)を支持する場合、それらは非推奨ではありません
  • defineProperty定義するプロパティをより細かく制御できます。プロパティがconfigurabilewritableおよび であるかどうかを決定できますenumerablegetとでそれを行うことはできませんset。さらに、defineProperty必要なゲッターまたはセッターを定義できず、値のみを定義できませんでした。
  • これ以上の粒度が必要ない場合はgetandを使用します。これはシュガー構文であり、オブジェクト定義自体で使用できます。インスタンスの作成後に使用する必要があります。より粒度が必要な場合、または getter と setter を指定する必要がなく、値のみを指定する必要がある場合に使用します。setdefinePropertydefineProperty

それが役に立てば幸い。

getおよびに関する仕様へのリンクset

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

于 2013-10-24T11:18:50.637 に答える