Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象定义属性和最大值_Javascript_Oop_Getter Setter - Fatal编程技术网

JavaScript对象定义属性和最大值

JavaScript对象定义属性和最大值,javascript,oop,getter-setter,Javascript,Oop,Getter Setter,我正在学习JavaScript中OOP的基础知识,我对这个示例有一些问题: var Human = function (first, surname) { var x = {}; Object.defineProperties(x, { first: { get: function () { return this.first; }, set: function

我正在学习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");
  • 这:
    console.log(alex)输出:

    {}

  • 这是:
    console.log(alex.first)输出:

    未捕获范围错误:超过最大调用堆栈大小


  • 有人知道我做错了什么吗?

    问题在于范围。因为您正在定义一个属性,并且在getter和setter中引用相同的getter和setter

    可以通过删除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");