![](/img/trans.png)
[英]Javascript: How do you call a variable function inside a prototype class?
[英]Javascript - How do you call a function inside a class from within that class?
我试图从一个对象中调用函数MyMethod,但下面的语法都不起作用。 下面一定有一个非常明显的错误,但我看不到它。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/jscript">
function MyObject() {
//how do I get one of these to work??
this.MyMethod; //does not work
this.MyMethod(); //does not work either
MyMethod(); //does not work either
this.MyMethod = function () {
alert('It works');
}
}
var test = new MyObject();
</script>
</head>
<body>
</body>
</html>
有两个主要问题
text/javascript
,而不是text/jscript
所以:
function MyObject() {
this.MyMethod = function () {
alert('It works');
}
this.MyMethod(); //should now work
}
var test = new MyObject();
你已经调用了javascript类的构造函数中的private方法。 在这一点上,功能尚未初始化
但如果你像这样初始化对象:
var test = new MyObject();
然后这样做:
test.myMethod();
它会工作。
首先,将其设置为父函数的属性,如下面脚本的“A”版本中所做的那样。 如果这样做,该功能仅在您给出定义后才可用。
() { ... }". 其次,使用“function (){...}”的经典方法定义函数。 该定义经历“提升”,这意味着该功能在整个父对象中变得可用,即,甚至在其定义的位置之上。 您可以在下面的示例中的“B”版本中根据原始海报的代码查看此内容。 也在https://jsfiddle.net/dnL4j30u/
<script>
function MyObject() {
MyMethod();
this.MyMethod = function() {
console.log('It works A');
}
this.MyMethod();
MyMethod();
function MyMethod() {
console.log('It works B');
}
}
var test = new MyObject();
</script>
输出是
It works B (this works because the second definition gets hoisted)
It works A
It works B
var MyObject = function MyObject() {
this.MyMethod = function () {
alert('It works');
} }
var test = new MyObject(); test.MyMethod();
以上都可以。 或者你可以创建一个构造函数并在其中调用此方法。 所以在创建对象时它会调用this.MyMethod()
我很确定你可以在文件中的任何地方定义方法,即使在你调用它们之后,但是你定义方法的方法就是缺陷。
http://ejohn.org/apps/learn/#5
请注意,如果使用匿名函数定义变量作为其值,则无法按名称调用该函数(因为它没有名称)。 相反,你应该使用约定命名它
function nameOfTheFunction( arguments ) {
...
}
我发现以下链接非常有用:
http://www.dustindiaz.com/javascript-function-declaration-ambiguity/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.