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时存在。它们总是让我感觉像是这样。