2015-12-01 2 views
0

Я пытаюсь изучить javascript, и я нашел следующий код: Я не понимаю, как эти возвращенные функции могут быть вызваны так, как они явно определены на объекте (I.e mycat.makeOlder()). может кто-нибудь объяснить? btw Я знаю oop java/C#.вызов функции, возвращаемой javascript, как обычный определенный метод?

function CatMaker(name) { 
var age = 10; 

//construct an object on the fly with three methods. 
//All methods have access to age, but age cannot be 
//directly accessed outside of this function. 
return { 
    "sayHello": function() { //first method 
     alert("Miaow"); 
    }, 
    "getAge": function (inCatYears) { //second method 
     if (inCatYears) { 
      return age * 7; 
     } 
     else { 
      return age; 
     } 
    }, 
    "makeOlder": function() { //third method 
     age++; 
    } 
}; 

}

 var mycat = CatMaker('Snuffles'); 
    alert(mycat.getAge(true)); //returns 70 
    alert(mycat.makeOlder()); 
    alert(mycat.getAge(true)); //returns 77 
+3

Это не ** ** функции, которые ** методы ** из простого объекта, который возвращается ' CatMaker', поэтому у вас есть доступ к этим методам с помощью переменной 'mycat' – hindmost

+0

Не можете ли вы вызвать методы, подобные в примере? Функция CatMaker возвращает объект, указанный в скобках '{}'. Этот объект имеет определенные методы, и к ним можно получить доступ с помощью точечной нотации. Поэтому 'mycat.makeOlder' ссылается на функцию, которая может быть вызвана, например. – jswetzen

+0

В javascript вы не определяете методы (функции в свойствах) в классах, вы помещаете их в объекты. – Bergi

ответ

0

Вы создали некоторые функции, относящиеся к Class CatMaker.

Вы можете запустить свой пример здесь: http://jsfiddle.net/2tcjxepu/

Если вы объявите функции вне CatMaker сферы вы сделали регулярные "static" functions вы можете вызвать корыта весь файл, как всегда.

Если вы не создавали класс, но все еще хотите назвать это можно считать singleton

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