0
var Shape = function(type) 
{ 
    this.type = type; 

    addEventListener("resize", this.align); 
} 

Shape.prototype.align = function() 
{ 
    alert(this.type); 
} 

.Javascript метод не видит переменную объекта

var variable = new Shape('rectangle'); 

Когда я изменен, я хочу предупреждение прямоугольника но он предупреждает неопределенной

+0

'предупреждение (это)' (или, вернее, войти на консоль), что вы видите? – Teemu

+0

, добавив ответ BenG. В случае события * это * будет указывать на * окно * –

+0

Я вижу ** [Объект объекта] ** – hsyn

ответ

1

Вам необходимо сдать область действия this в мероприятии resize.

var Shape = function(type) { 
 
    this.type = type; 
 
    addEventListener("resize", this.align.bind(this)); 
 
} 
 

 
Shape.prototype.align = function() { 
 
    alert(this.type); 
 
} 
 

 

 
var variable = new Shape('rectangle');

+0

Спасибо, он работает. – hsyn

+0

@hsyn, но вы можете принять - Tick ниже –

0

Вы должны использовать variable.align(), так как вы создаете новый объект. Делая так, я получаю то, о чем вы просите: предупреждение с 'rectangle'.

0

Значение this определяется как называется функцией. Он не может быть задан при назначении во время выполнения, и при каждом вызове функции он может быть различным. ES5 ввел метод привязки установить значение функции-х это независимо от того, как это называется [MDN]

Function.prototype.bind() метод создает новую функцию, которая при вызове, имеет это свое ключевое слово, установленное на основе предоставленного значения.

var Shape = function(type) { 
 
    this.type = type; 
 
    addEventListener("resize", function() { 
 
    this.align(); 
 
    }.bind(this)); 
 
    //OR addEventListener("resize", this.align.bind(this)); 
 
} 
 

 
Shape.prototype.align = function() { 
 
    alert(this.type); 
 
} 
 

 

 
var variable = new Shape('rectangle');

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