我是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
。在这种情况下,我该怎么做。?
答案 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();
对于最后一个,我会说看看你的继承链,并用只有继承对象共享的函数来构建你的基础。
希望这有帮助。