2016-07-13 2 views
1

Создание калькулятора, который принимает новые методы. Но когда я добавляю новый метод, он не видит объект «это». Почему Console.log возвращает «undefined»?Новый метод не видит «это» (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

+ goliadkin Я думаю, что он работает в любом случае ... – ahitt6345

ответ

4

Вы не определили this.numberOne и this.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.numberOne и calc.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["/"]);

Смежные вопросы