2016-07-13 11 views
1

新しいメソッドを受け入れる電卓を作成する。しかし、新しいメソッドを追加すると、オブジェクトの「this」は表示されません。なぜConsole.logが "undefined"を返すのですか?新しいメソッドで「this」(JavaScript)が表示されない

function Calculator() { 
 
    this.numbers = function() { 
 
     this.numberOne = 2; 
 
     this.numberTwo = 5; 
 
    }, 
 
    this.addMethod = function(op, func) { 
 
     this[op] = func(this.numberOne, this.numberTwo); 
 

 
    // WHY LOG RETURNS "undefined"? 
 
     console.log(this.numberOne); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 

 
calc.addMethod("/", (a, b) => (a/b)); 
 
document.write(calc["/"]);

+1

あなたは5行目にタイプミスがあります:カンマはセミコロンでなければなりません。 – GMaiolo

+4

'this.one'は決して設定されないので、ええ、' undefined'です。 –

+0

+ゴリアドキンいずれにしてもうまくいくと思います... – ahitt6345

答えて

4

あなたがそれに関数を呼び出すことを試みた前に、あなたはthis.numberOnethis.numberTwoを定義していませんでした。さらに、あなたのコードで定義されていないthis.oneを印刷しています。

function Calculator() { 
 
    this.numbers = function() { 
 
    this.numberOne = 2; 
 
    this.numberTwo = 5; 
 
    }, 
 
    this.addMethod = function(op, func) { 
 
    this[op] = func(this.numberOne, this.numberTwo); 
 

 
    // WHY LOG RETURNS "undefined"? 
 
    console.log(this.numberOne); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 
calc.numbers(); 
 
calc.addMethod("/", (a, b) => (a/b)); // 2/5 
 
document.write(calc["/"]);
は、その後のコードが calc.numberOnecalc.numberTwo

+0

this.oneはタイプミスです。 calc.numbers();すべての作品!大いに感謝する! –

+0

あなたの歓迎!この回答に印を付けてください! – ahitt6345

0

あなたの番号が初期化取得されていない定義されているので、期待通りに動作します:

は、次のスニペットを試みた場合。

また、this.oneとは何ですか? numberOneを意味しましたか?以下の作業のコード

チェックアウト:

function Calculator() { 
 
    this.numberOne = 2; 
 
    this.numberTwo = 5; 
 
    this.addMethod = function(op, func) { 
 
    this[op] = func(this.numberOne, this.numberTwo); 
 
    // WHY LOG RETURNS "undefined"? 
 
    console.log(this.numberOne, this.numberTwo); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 
calc.addMethod("/", (a, b) => (a/b)); 
 
document.write(calc["/"]);

関連する問題