在类中声明方法

时间:2014-02-05 06:30:31

标签: javascript oop prototype prototypal-inheritance

我是javascript面向对象编程的新手。我希望编写一个JS类,它有一些变量和方法。

我正在尝试这种方式:

function B(){
    function makeB()
    {
        alert('make B');
    }
}
var b = new B();
b.makeB();

它显示:Uncaught TypeError: Object #<B> has no method 'makeB'

我不能声明这样的函数吗?但只需添加this即可,我就可以访问它了。它是变量中的局部函数吗?

除此之外,我试过这个:

function B(){
    function call()
    {
        alert('B call');
    }
    this.makeB = function(){
        call();
        alert('makeB'); 
    }   
}
var b=new B();
b.makeB();

使用此功能,makeB可以在内部调用call,但如果我尝试使用原型访问它,则不会

function B(){
    function call()
    {
        alert('B call');
    }
}
B.prototype.makeB = function()
{
    call();
    alert('callB');
}

我再次无法从call拨打makeB,好像call是特定于块的功能。

如果我希望任何函数对特定类是私有的而不是由子类继承,该怎么办。一种方法,只能由其对象使用,而不能由继承类的对象使用。

function C(){}
C.prototype = new B();
C.prototype.constructor = C;

说,我希望C的对象拨打makeB而不是call。在这种情况下,我该怎么做。?

2 个答案:

答案 0 :(得分:1)

为了在JavaScript对象中声明可公开访问的函数,您必须使用this。通过应用this,您实际上将此函数公开为对象的属性

function Person(first,last) {
   this.firstname = first;
   this.lastname = last;

   //private variable available only for person internal use
   var age = 25;

   //private function available only for person internal use
   var returnAge = function() {
      return age;
   };

   // public function available as person propert
   this.askAge = function()
   {
       return returnAge ;
   }
}

var john = new Person('John','Smith');
console.log(john.returnAge); // will return undefined
var johnsAge = john.askAge(); // will return 25

答案 1 :(得分:1)

我会尝试按你的问题顺序回答......

在您的第一个示例中,函数call被视为private,并且无法在对象范围本身之外访问。

对于您的第二个问题,如果您将功能分配给public或我喜欢做什么,那么它将是this,创建一个名为 self 的“私有”变量或有时在深夜,我可以称之为 。在其他函数调用和回调中,你总是拥有对象上下文的范围。

 function B(){
   var self = this;
   function call()
   {
       alert('B call');
   }
   self.makeB = function() {
     call();
     alert('makeB'); 
   }   
 }
 var b=new B();
 b.makeB();

对于最后一个,我会说看看你的继承链,并用只有继承对象共享的函数来构建你的基础。

希望这有帮助。