未捕获的TypeError:Person不是构造函数

时间:2017-03-02 10:41:33

标签: javascript

var Person = (function () {
    var name = Symbol('name');
    class Person {
    constructor(name) {
        this[name] = name
    }
    getname() {
        return this[name];
    }
  }
}());

var person = new Person();
console.log(person.getname())

我通过Google上的教程做了一个小例子。此示例阻止从外部作用域访问属性this.name。但是我收到了错误

  

未捕获的TypeError:Person不是构造函数。

我该如何解决?

3 个答案:

答案 0 :(得分:1)

function Person (name) {
    this.name = name;
    this.getname=function() {
        return this[name];
    };
}

var person = new Person('name');
console.log(person.getname())

答案 1 :(得分:1)

您必须返回Person类并使用另一个变量名来存储符号,因为它与构造函数参数名称相同:

var Person = (function () {
    var nameSymbol = Symbol('name');
    return class Person {
      constructor(name) {
          this[nameSymbol] = name;
      }
      getname() {
          return this[nameSymbol];
      }
  }
}());

var person = new Person('John');
console.log(person.getname())

答案 2 :(得分:0)

您不必将函数封装在一个函数中。 ES5需要函数来创建一个类。您提供的代码片段混合了ES5和ES6。简单使用如下:

    class Person {
      constructor(name) {
          this.name = name
      }
      getname() {
          //return this.name;
          return this['name'];
      }
  }

  let person = new Person('Alex');
  console.log(person.getname());

如果您使用[]表示法访问对象属性,请记住它必须是一个字符串,即用引号括起来