JS构造函数的返回值
return value of JS Constructor
我觉得自己像个初学者。我不太明白为什么这两个代码的行为不同。有人能解释一下吗?我觉得我在这里错过了一些JS的机制。
Code1:
function Car(){
var miles = 0;
function drive(dist){
miles = miles+dist;
}
return {
drive:drive,
miles:miles
}
}
var car = new Car;
car.drive(50);
Code2:
function Car(){
var miles = 0;
function drive(dist){
miles = miles+dist;
}
return {
drive:drive,
miles:function(){
return miles;
}
}
}
var car = new Car;
car.drive(50);
所以它看起来像code1, JS创建一个新的作用域/闭包/任何....物超所值。也许有个聪明的人可以提供一些这种行为的背景。
小提琴:http://jsfiddle.net/P7Zqv/
JavaScript按值复制。
在第一个例子中:
-
miles
变量为0
- 对象返回一个
miles
属性,其中包含0
的副本。 -
miles
变量被更新(现在是50
)。 -
miles
属性被读取(仍然是0
)。
在第二个例子中:
-
miles
变量为0 - 对象返回一个
miles
属性,该属性包含一个返回miles
变量值的函数。 -
miles
变量被更新(现在是50
)。 - 调用
miles
函数,返回miles
变量(50
)的值。
第一个代码返回的变量英里,它被更新但没有被阅读,因为它是在一个闭包,就像昆汀所提到的,第二个代码是返回一个函数,它返回一个变量被称为一个getter函数在Javascript中,你使自己的getter函数,它返回更新后的值,你可以在这里阅读更多关于getter函数https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects。
简而言之,第一个代码返回变量miles,第二个代码返回getter函数miles(),该函数返回变量miles。我希望这对你有帮助:)
如果你尝试这样做:
代码3
function Car()
{
var miles = 0;
function drive(dist)
{
return miles += dist;
}
return {
drive: drive,
miles: miles
};
}
var car = new Car();
car.drive(50); // returns 50 and not undefined
这样当car.drive(50)被调用时,你不会得到一个undefined,因为函数返回一个值。
相关文章:
- ES6构造函数返回基类的实例
- Javascript 中的构造函数不会返回由原型函数传递的正确值
- Javascript新函数构造函数没有't返回所需的值
- 构造函数中的函数返回值
- jQuery的返回值是Array,但构造函数是Object.如何
- 为什么当我调用具有返回值的函数时,我的 onclick 事件不起作用
- JS构造函数中“this”的值返回“undefined”
- 当返回另一个构造函数时,从Javascript构造函数返回this的值
- 我的javascript构造函数方法以文本形式返回整个方法,而不是预期的返回值
- 从构造函数返回的基元值将丢失
- 涉及 AJAX 不返回值的函数 - jQuery
- 如何每隔几秒钟运行一个有返回值的函数
- Promise构造函数的返回值
- 如何保证异步返回值在函数返回之前保存
- 从构造函数创建的对象返回带有构造函数名称的对象,但没有冒号
- 当调用具有从按钮点击返回值的函数时的正确练习
- JavaScript缓存返回值的函数有多个参数
- 没有返回值的函数
- 为什么要写一个从不返回值的函数呢?
- JS构造函数的返回值