闭包无法访问函数
Closures Cannot access a function
我想了解闭包。在下面的代码中,我创建了构造函数 Ninja
的实例,并调用该实例 kawazaki
。我希望能够访问 Ninja
的方法。但是,我得到的是 TypeError: Object #<Ninja> has no method 'feints'
。
我预期的输出是 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 = new Ninja;
kawazaki.feints();
alert(kawazaki.getFeints());
function Ninja() {
var feints = 0;
this.getFeints = function () {
return feints;
};
this.feints = function () {
feints++;
};
}
您需要在构造函数中将 public 属性分配给 this
。
函数getFeints
和feints
的范围仅限于函数Nija。由于您无法访问函数中声明的变量,因此您无法访问这些函数。
为了能够执行 kawazaki.feints()
,你必须 "attach" 函数到 Ninja 函数,作为一个对象(函数也是)
您将在这些资源中找到实现该目标的几种方法,以及一些更深入的解释:
闭包是一个非常简单但在很大程度上被误解的话题。
function Ninja() {
var feints = 0;
function getFeints() {
return feints;
}
function feintsInc() {
feints++;
}
}
您已经正确定义了闭包,但请注意,闭包实际上并不是对象的方法。为了获得所需的输出,您需要在关闭对象之前调用闭包。
feintsInc();
getFeints();
但是,如果您希望按照
kawazaki.feintsInc();
您需要在函数中使用 this
关键字来获取分配给对象的函数。
Note,make sure your functions and variable names don't overlap.
我想了解闭包。在下面的代码中,我创建了构造函数 Ninja
的实例,并调用该实例 kawazaki
。我希望能够访问 Ninja
的方法。但是,我得到的是 TypeError: Object #<Ninja> has no method 'feints'
。
我预期的输出是 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 = new Ninja;
kawazaki.feints();
alert(kawazaki.getFeints());
function Ninja() {
var feints = 0;
this.getFeints = function () {
return feints;
};
this.feints = function () {
feints++;
};
}
您需要在构造函数中将 public 属性分配给 this
。
函数getFeints
和feints
的范围仅限于函数Nija。由于您无法访问函数中声明的变量,因此您无法访问这些函数。
为了能够执行 kawazaki.feints()
,你必须 "attach" 函数到 Ninja 函数,作为一个对象(函数也是)
您将在这些资源中找到实现该目标的几种方法,以及一些更深入的解释:
闭包是一个非常简单但在很大程度上被误解的话题。
function Ninja() {
var feints = 0;
function getFeints() {
return feints;
}
function feintsInc() {
feints++;
}
}
您已经正确定义了闭包,但请注意,闭包实际上并不是对象的方法。为了获得所需的输出,您需要在关闭对象之前调用闭包。
feintsInc();
getFeints();
但是,如果您希望按照
kawazaki.feintsInc();
您需要在函数中使用 this
关键字来获取分配给对象的函数。
Note,make sure your functions and variable names don't overlap.