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不是构造函数。
我该如何解决?
答案 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());
如果您使用[]表示法访问对象属性,请记住它必须是一个字符串,即用引号括起来