javascript - 在 javascript 中使用 this 关键字将参数传递给函数

标签 javascript

var now = 2018;

function calculateAge(yearOfBirth) {
    return now - yearOfBirth;
}

var Josh = {
    dateOfBirth: 1990,
    age: calculateAge(this.dateOfBirth),
}

console.log(Josh.age);

为什么我不能在函数中使用键作为参数?如果我在那里输入正常数字,它就可以正常工作,但我不明白为什么这种方式不行。它与递归或作用域有关吗?

最佳答案

原因是在这个声明中:

var Josh = {
    dateOfBirth: 1990,
    age: calculateAge(this.dateOfBirth),
}

this 并不引用 Josh,也不引用将成为 Josh 的对象。这是不可能的,因为当这条语句执行时,这些东西都不存在。

在此语句中,this 指的是该范围内任何其他语句中所指的任何内容。

console.log(this);                         // <-- same this
var Josh = {
    dateOfBirth: 1990,
    age: calculateAge(this.dateOfBirth),   // <-- same this
}
console.log(this.someProperty);            // <-- same this

如果该范围内的 this 没有 1990dateOfBirth 属性,您将不会得到您想要的结果期待着。

如果您想避免重复 1990 值,请将其存储在变量中,并引用该变量:

var dob = 1990;
var Josh = {
    dateOfBirth: dob,
    age: calculateAge(dob)
};

关于javascript - 在 javascript 中使用 this 关键字将参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479060/

相关文章:

javascript - 猫头鹰旋转木马销毁问题(未捕获的类型错误 : Cannot read property 'destroy' of undefined )

javascript - 关于 vuejs 示例中的 Promise 的解释请求

php - Web 应用程序开发的优化策略

javascript - 将负载放入变量中

javascript - Ext.Net 按钮更改字体大小

javascript - 需要添加删除按钮或符号以从数据库中删除检索到的图像

javascript - 获取另一个数组中包含的数组元素索引的简洁方法?

javascript - 识别 Angular2 中的后退/前进浏览器按钮

javascript - Stripe 元素基于什么?他们如何保护它?

javascript - Jquery Mobile 不透明度不起作用 :(