我是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。在这种情况下,我该怎么办?

最佳答案

为了在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

09-17 13:51