2012-05-31 2 views
3

мне интересно, если мне нужна публичный метод, мне нужно использовать этотКак объявить публичный метод и частный метод в JavaScript

var TestClass = function() { 

    this.pub = function() { 
       blahblah; 
     }; 

Если нужно частный метод (внутренний метод), мне нужно использовать

var TestClass = function() { 

    var pri = function() { 
       blahblah; 
     }; 

Это правда?

+1

Для вашей личной функции я бы предпочел 'function pri() {blah; } 'вместо использования объявления' var'. – Pointy

+2

Эта «частная» концепция действительно не такая же, как на других языках. В основном бесполезно пытаться сопоставить семантику наследования C++, Java, C# и т. Д. С тем, что предоставляет JavaScript. Они принципиально разные. – Pointy

ответ

5

Нет, это неправда. Внутренняя функция (pri) является функцией, а не методом. Хотя разница в javascript незначительна (так как каждая функция может использоваться как метод и наоборот), вы все равно не можете назвать ее this.pri(), что было бы возможно с помощью истинных частных методов.

Как примечание, несмотря на его синтаксис Java-подобный, Javascript, особенно его объектная модель, существенно отличается от Java/C++/C#. В частности, такие понятия, как класс и инкапсуляция не существует в Javascript.

+0

Хорошая точка - это своего рода то, что «частное» означает :-) – Pointy

0

Обычно я использую этот узор, который я не видел много. Я делаю это, чтобы не прикасаться к моим методам каким-либо особым образом. Если все открыто, то обычно необходимо обеспечить, чтобы вызванные методы были объявлены до вызова метода.

var person = new Person("Mo", "Yo"); 
person.getFullname(); 
person.getFirstname(); 
person.getLastname();   

function Person(firstname, lastname) { 
    var firstname, lastname; 

    (function constructor(){ 
     setFirstname(firstname); 
     setLastname(lastname) 
    })(); 

    this.getFullname = getFullname; // Makes getFullName() public 
    function getFullname() { 
     // Will allow you to order method in whatever order you want. 
     // If we where to have it as just this.getFullname = function() {...} and same for firstname 
     // as it is normally done, then this.getFirstname would have to be placed before this method. 
     // A common pain in the ass, that you cannot order methods as you want!  
     return getFirstname() + ", " + getLastname(); 
    }    

    this.getFirstname = getFirstname; 
    function getFirstname() { 
     return firstname; 
    } 

    function setFirstname(name){ 
     firstname = name; 
    } 

    this.getLastname = getLastname; 
    function getLastname() { 
     return lastname; 
    } 
    function setLastname(name) { 
     lastname = name; 
    }  
} 
Смежные вопросы