我是Javascript的新手。我正在尝试使用闭包和Prototype。
在下面的代码片段中,调用min函数,但是console.log(y)打印undefined。为什么这个以及this.val将引用什么对象?
function Air() {
this.text = "Inside Air";
};
Air.prototype.min = function() {
this.val = "Inside min";
console.log("Inside min");
};
var x = new Air();
var y = x.min();
console.log(y);
在第二个代码段中,此代码可以正常运行。
function Air() {
console.log("InsiAir");
return {
min: function() {
console.log("Inside min");
}
};
}
var air = Air();
air.min();
虽然,这不是
function Air() {
function min() {
console.log("Inside Min");
}
}
var air = Air();
air.min();
任何人都可以解释究竟发生了什么
答案 0 :(得分:0)
function Air() {
this.text = "Inside Air";
}
Air.prototype.min = function() {
this.val = "Inside min";
console.log("Inside min");
};
var x = new Air();
var y = x.min();
console.log(y);
您创建了一个新的Air
对象,该对象已分配给x
。在构造函数中,您可以设置新对象的text
属性,该属性不会被进一步使用。然后,您在原型上找到的min
上调用x
方法。在该方法中,设置了一个名为val
的实例属性,该属性未使用。 min
登录到控制台。 min
方法不返回任何内容,这与返回undefined
相同。因此,undefined
的值被赋值给变量y
。 y
的值undefined
将记录到控制台。
function Air() {
console.log("InsiAir");
return {
min: function() {
console.log("Inside min");
}
};
}
var air = Air();
air.min();
您调用Air()
并返回一个对象。该对象被分配给变量air
。您在min
表示的对象上调用air
方法。在min
函数中,它会记录到控制台。 min
函数不返回任何内容,这与返回undefined
相同。忽略返回的值(虽然控制台可能会打印它)。
function Air() {
function min() {
console.log("Inside Min");
}
}
var air = Air();
air.min();
您调用Air()
函数,该函数不返回任何内容,这与返回undefined
相同。 undefined
的值已分配给变量air
。尝试在min
上调用方法undefined
,这会导致运行时错误,例如"无法读取未定义的属性min
"。 min
是Air
函数中的局部函数,只能在Air
内调用,但不是,因此它什么都不做。
这里没有任何东西与闭包有关,在某种意义上说这个术语通常被使用,指的是一些函数访问("关闭")外部作用域中的变量的情况。例如,扩展你的第二个例子:
function Air() {
var magic = 42;
return {
min: function() {
return magic;
}
};
}
var air = Air();
console.log(air.min());
函数/方法min
现在"关闭"在外部范围内的变量magic
上。即使在Air()
返回后,返回对象上的min
方法仍然可以访问magic
变量,因此42
将被记录到控制台。
答案 1 :(得分:0)
在第一个例子中:
function Air() {
this.text = "Inside Air";
};
Air.prototype.min = function() {
this.val = "Inside min";
console.log("Inside min");
};
var x = new Air();
var y = x.min();
console.log(y);
显示undefined
,因为min
功能不会返回任何内容。
如果您使用var y=x.min()
且min
函数未返回任何内容,则y
变量将具有undefined
值。
如果想工作,请使用:
var x = new Air();
x.min();
与void
方法类似。
在第二个片段中
Air()
什么都不返回(未定义)。 undefined
的值已分配给变量air
。然后,当您尝试访问min
方法时,您将收到错误。
在最后一个例子中,它不起作用,因为你没有返回任何东西。
function Air() {
return {
min() {
console.log("Inside Min");
}
}
}
var air=Air();
air.min();