2016-05-13 94 views
2

我创建了一个简单的类myClass并添加了一个方法get_volume。 如何在课堂内呼叫get_volume如何调用类内类的方法

我总是Uncaught ReferenceError: get_volume is not defined

var test = new myClass(); 

function myClass() 
{ 
    this.volume   = get_volume(); 
} 

myClass.prototype.get_volume = function() 
{ 
    return 100; 
}; 

的jsfiddlehttps://jsfiddle.net/k01stzaq/

+0

我得到“get_volume is not defined(...)”not set_volume。但get_volume未定义 – Pierfrancesco

+0

请拨打 – Patrick2607

回答

4

执行顺序是什么导致你的问题。您在之前致电new myClass()扩展了原型。

(另请注意,你试图引用get_volume没有this我认为这是一个拼写错误,但也许不是。)

订购代码如下:

function myClass(spielname)  //Definition der Klasse "kicker" 
{ 
    this.volume   = this.get_volume(); 
} 

myClass.prototype.get_volume = function() 
{ 
    return 100; 
}; 

var test = new myClass(); 

的构造函数本身被悬挂在你的原始文件中,所以new myClass()调用工作,但test的分配是在原型的扩展之前,因此在构造函数中没有get_value属性,直到之后那点(protoytpe扩展)。

作为一个方面说明,JavaScript中常见的做法是使用以大写字母开头的函数名来表示函数用作构造函数。这不是由语言强制执行的。

+0

我仍然没有定义'get_volume()'。小提琴:https://jsfiddle.net/k01stzaq/1/ – Black

+0

@EdwardBlack它必须是'this.get_volume()' - 没有隐式类的范围,因为在Java等 – Pointy

+0

很好的答案。关于JavaScript的常见做法,camelCase更常见,被JavaScript API,DOM API等使用。 – alex

1

首先声明构造函数和原型,然后初始化你的测试对象。

function myClass(spielname) 
{ 
    this.volume = this.get_volume(); 
} 

myClass.prototype.get_volume = function() { 
    return 100; 
}; 


var test = new myClass(); 
console.log(test.volume); //should print 100 

希望这可以帮助!

+0

您正在使用'set_volume',而不是'get_volume' – Black

+0

已更改。请检查现在是否有作品! – Pierfrancesco

1

1.定义功能internaly:

function myClass(spielname)  //Definition der Klasse "kicker" 
{ 
    this.getVolume= function(){ 
     return this.volume; 
    } 
    this.volume   = 100; 
} 

2. add方法原型:

function myClass(spielname)  //Definition der Klasse "kicker" 
    { 

     this.volume   = 100; 
    } 
myClass.prototype.getVolume = function(){ 
    return this.volume; 
} 
+0

不应该鼓励第一个例子。 – alex

+0

你是对的Alex,这显然是一种不好的做法。 – jeorfevre

1

要调用get_volume为全局函数,但它被定义为myClass的一种方法。
因此get_volume方法应在myClass对象的上下文中调用。
更改您的代码,如下所示:

function myClass(spielname) 
{ 
    this.volume = this.get_volume(); 
} 

myClass.prototype.get_volume = function() 
{ 
    return 100; 
}; 

var test = new myClass();