我是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