Javascript 闭包不能访问函数
我试图理解闭包。在下面的代码中,我创建了构造函数Javascript 闭包不能访问函数,javascript,closures,Javascript,Closures,我试图理解闭包。在下面的代码中,我创建了构造函数Ninja的一个实例,并调用该实例kawazaki。我希望能够访问忍者的方法。但是,我得到了一个TypeError:Object#没有方法“假动作” 我期望的输出是1 这是我的密码: function Ninja() { var feints = 0; function getFeints() { return feints; } function feints() { feint
Ninja
的一个实例,并调用该实例kawazaki
。我希望能够访问忍者
的方法。但是,我得到了一个TypeError:Object#没有方法“假动作”
我期望的输出是1
这是我的密码:
function Ninja() {
var feints = 0;
function getFeints() {
return feints;
}
function feints() {
feints++;
}
}
var kawazaki = new Ninja();
kawazaki.feints();
console.log(kawazaki.getFeints());
请尝试以下方法:
var kawazaki=新忍者;
川崎假动作();
警报(kawazaki.getfents());
功能忍者(){
var佯攻=0;
this.getfents=函数(){
回击假动作;
};
this.fents=函数(){
假装++;
};
}
函数getFeints
和feints
的范围仅限于函数Nija。由于无法访问函数中声明的变量,因此无法访问这些函数
要执行kawazaki.fents()
,必须将函数作为对象“附加”到Ninja函数(函数也是对象)
您将在这些资源中找到实现这一点的几种方法,以及一些更深入的解释:
function Ninja() {
var feints = 0;
function getFeints() {
return feints;
}
function feintsInc() {
feints++;
}
}
您已经定义了闭包,但请注意闭包实际上不是对象的方法。为了获得所需的输出,您需要在关闭对象之前调用闭包
feintsInc();
getFeints();
Note,make sure your functions and variable names don't overlap.
但是,如果您希望按要求执行此操作
kawazaki.feintsInc();
您需要在函数中使用此
关键字来获取分配给对象的函数
feintsInc();
getFeints();
Note,make sure your functions and variable names don't overlap.
您刚刚在构造函数中创建了函数。为了能够将它们用作新的
Ninja
实例的方法,您应该将这些函数保存到this
对象:this.getfents=function(){…}
和this.fents=function(){…}
“我希望能够访问Ninja的方法。”JavaScript并不像您想象的那么神奇getFeints
和feints
只是Ninja
的本地函数。它们无法从外部访问,只能在执行Ninja
@FelixKling时存在。它们总是让我感觉像是这样。