2017-03-02 1 views
0

キャッチされない例外TypeError:人は、私がグーグルのチュートリアルを介した小さな例を作ってるんだコンストラクタ

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())

ではありません。この例では、スコープ外のプロパティthis.nameにアクセスできません。しかし、エラーが発生しています

Uncaught TypeError: Person is not a constructor.

どうすれば解決できますか?

あなたはPersonクラスを返すと、それは、コンストラクタの引数名と同じだからシンボルを格納するために別の変数名を使用する必要が
+2

にi.e.wrapped文字列でなければならないことを覚えていますか? –

答えて

1

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())

+0

ありがとうございました! –

1

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

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

+0

ありがとうございます。やってみます。 –

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()); 

、あなたが私たちのチュートリアルをリンクすることができ、それは引用符

関連する問題