0

私は JavaScript で OOP の基本を学んでいますが、この例にはいくつかの問題があります。

var Human = function (first, surname) {
    var x = {};
    Object.defineProperties(x, {
        first: {
            get: function () {
                return this.first;
            },
            set: function (value) {
                this.first = value;
            }
        },
        surname: {
            get: function () {
                return this.surname;
            },
            set: function (value) {
                this.surname = value;
            }
        }
    });
    return x;
};
var alex = new Human("Alex", "Corlette");
  1. これ:console.log(alex);出力:

    { }

  2. そしてこれ:console.log(alex.first);出力:

    キャッチされない RangeError: 最大呼び出しスタック サイズを超えました

誰が私が間違っているのか分かりますか?

4

1 に答える 1

7

問題は範囲です。プロパティを定義しているため、同じゲッターとセッターを参照するゲッターとセッターで。

この例は、this キーワードを削除することで修正できます。

var Human = function (first, surname) {
  var x = {};
  Object.defineProperties(x, {
    first: {
        get: function () {
            return first;
        },
        set: function (value) {
            first = value;
        }
    },
    surname: {
        get: function () {
            return surname;
        },
        set: function (value) {
           surname = value;
        }
    }
  });
  return x;
};
var alex = new Human("Alex", "Corlette");
于 2013-03-10T05:04:02.657 に答える