2012-05-31 84 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; 
    }  
}