2016-12-30 2 views
0

У меня возникли проблемы с пониманием того, как использовать «это» в следующем коде. Я создаю круги с Raphael.js и JQuery.У меня возникли проблемы с пониманием использования «этого» в JavaScript

$(function(){ 

    function circleAttributes(x, y, r){ 
     this.x = x; 
     this.y = y; 
     this.r = r; 
     this.strokeweight = 3; 
     console.log(x,y,r, this.x); 
    } 
    var paper = Raphael(0, 0, 1200, 600); 

    var circles = []; 
    for(var i = 0; i < 20; i++){ 
     circles.push(new circleAttributes(Math.floor(Math.random() * 500), Math.floor(Math.random() * 500), 5)); 
     paper.circle(circles[i].x, circles[i].y, circles[i].r); 
     console.log(circles); 
    } 

}); 

Все работает отлично таким образом, но если я изменить this.x к circleAttributes.x я не могу получить доступ к й в строке paper.circle(circles[i].x, circles[i].y, circles[i].r);.

Я пишу circles[i].circleAttributes.x? Это тоже не работает, но я чувствую, что он должен быть в состоянии! Это должно быть так же, как сказать person.name или?

Я понимаю, что «это» используется как местоимение «он». Майк убегает, потому что ОН боится.

Редактировать: Я до сих пор не понимаю, пожалуйста, объясните это простым языком!

+1

просто 'this' относится к текущей области функций/объектов – azad

+0

Но тогда this.x и circleAttributes.x - то же самое верно? – AustriaNotAustralia

+0

@AustriaNotAustralia См. 'CircleAttributes.x' будет глобальным, тогда как' this' будет вашим локальным/текущим объектом. Таким образом, в стандартах es5 'this' используется для установки свойств для локальных объектов. рассмотрим цикл, который создает несколько объектов, и все эти объекты будут иметь разные свойства в терминах ширины, высоты, глубины и т. д. – Jai

ответ

0

Когда вы вызываете 'this'.property or 'this'.method, вы просто ссылаетесь на родительский объект, инициализирующий действие или функцию. Это экономит ваше время для написания всего и когда вы делаете chnage для имени объекта, id или подстановочного знака, который вы используете при вызове, вам не нужно менять всю строку, в которой она появилась.

В JQuery, когда у вас есть

$('#btn').click(function() { 
//you can access the btn object like below 
$(this).text('click me'); 
$(this).show(); 
}); 
+0

Да, я так понимаю, поэтому я должен был бы написать '$ ('# btn") 'вместо' $ (this) 'right? Но если я сделаю это в своем примере, это не сработает. – AustriaNotAustralia

+0

Я думаю вы можете сделать простой взлом, передав параметры публичной переменной и получить их при доступе к функции из другого. Или создать функцию statndard jQuery с помощью $ .fn.circleAttributes = function (inputfld, boundfld) .... –

0

«это» не является местоимением (если мы рассматриваем местоимение как указатель). «this» - это экземпляр объекта, где он используется. круги [i] .circleAttributes.x означает, что вы пытаетесь получить доступ к функции circleAttributes.x внутри функции circleAttributes, то есть вам нужно объявить circleAttributes.circleAttributes.x для доступа к ней таким образом.

+0

Ah , наконец, ответ, который имеет смысл для меня. Таким образом, нет способа объявить 'circleAttributes.x = x' и получить к нему доступ? – AustriaNotAustralia

+0

yes. (вы можете вложить его в создание другой переменной и присвоить ей компоненты x, y, z, но это еще одна тема) – Raaj

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