2016-03-13 5 views
0

Я работаю над назначением, которое использует метод pixel.getGreen(). Мой вопрос, когда я пытаюсь использовать pixel.getGreen (без круглых скобок), я получаю другой результат, чем при использовании метода с круглыми скобками. В чем разница между ними?
Вот код, я работаю с:pixel.getGreen vs pixel.getGreen()

function swapRedGreen(pixel){ 
    var oldRed = pixel.getRed(); 
    var oldGreen = pixel.getGreen(); 
    pixel.setRed(oldGreen); 
    pixel.setGreen(oldRed); 
    return pixel; 
} 
var image = new SimpleImage("smallhands.png"); 
print (image); 
for (var pixel of image.values()) { 
     pixel = swapRedGreen(pixel); 
    } 
print (image); 

Я получаю шаг черное изображение, когда я пытаюсь запустить код без скобок.

ответ

2

pixel.getGreen() является функцией вызова, тогда как pixel.getGreen только доступ к getGreen свойство pixel объекта, который в этом случае, должно быть определение функции. Помните, вы можете ссылаться на функцию без ее вызова, но скобки в JS означают, что вы вызываете/вызываете функцию. Не видя библиотеки/источник вы работаете с, это должно быть что-то вроде этого:

var pixel = { 
    getGreen: function() { 
    return 'green'; 
    } 
}; 
console.log(pixel.getGreen) // function() {...} 
console.log(pixel.getGreen()) // 'green' 

Если это не то, что вы видите, опубликовать еще некоторый контекст.

+0

У меня есть один вопрос: я не объявляю функцию при использовании 'pixel.getGreen', как в примере, который я опубликовал выше. Как работает эта функция, не объявляя ее в первую очередь? –

+0

Похоже, вы используете библиотеку. Это правильно? Если это так, то функция 'getGreen' объявлена ​​в другом месте, а когда вы введете' var image = new SimpleImage («smallhands.png»), 'у вас есть эта функция, доступная объекту' image' через прототипное наследование. Если вы не знаете, как работает прототипное наследование, определите google. Это стоит понимания и является очень фундаментальной концепцией в javascript. Надеюсь, это поможет! –