2016-11-18 3 views
0

Вот что меня озадачивает в JavaScript: в приведенном ниже коде у меня есть конструктор объектов, содержащий одно свойство. Ниже я добавляю несколько прототипов. Метод «method1» способен получить доступ к «this.property» просто отлично, и он возвращает значение 30. Метод «комбинировать» просто вызывает «метод1», но возвращает NaN. Кажется, что «this.property» был публичным для первого вызова, но не второго. Почему это странное поведение?js: метод не может получить доступ к свойству

var ObjBuilder = function() 
{ 
    this.property = 3; 
}; 

ObjBuilder.prototype = function() 
{ 
    var method1 = function() 
    { 
    return this.property * 10; 
    } 
    var combine = function() 
    { 
    return method1() + 2; 
    } 
    return {method1: method1, 
      combine: combine}; 
}(); 

// instantiate an object and call its methods 
var obj = new ObjBuilder(); 
console.log(obj.method1());//prints 30 
console.log(obj.combine());//prints NaN. WHY??? 
+0

Если вы зарегистрируете 'this' внутри' method1', тогда вызовите его внутри 'comb', вы увидите проблему – Li357

+0

@ t.niese [Это не похоже на это] (https://jsfiddle.net/3ovc6Lye /) - 'window'. Вы должны назвать это 'this.method1()', чтобы дать этот контекст. – Li357

ответ

2

Я думаю, ваша проблема в том, что combine просто вызывает method1 функцию (не this.method1, например), так this в this.property * 10 в этом вызове method1 не связан, как вы ожидаете, и, вероятно, связано с глобальным объектом ,

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

  • Нет связанных вопросов^_^