javascript – 在Factory函数中是对象名称,’this’关键字经常或总是可以互换的?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在Factory函数中是对象名称,’this’关键字经常或总是可以互换的?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1453字,纯文字阅读大概需要3分钟。
内容图文
以下代码不会引发错误,但我不完全确定原因.
在doubleIt方法中,我使用对象的名称,returnObject而不是this.
在实例化newInstance之后,我希望将returnObject这个术语复制到新的doubleIt方法中.因为如果从newInstance调用doubleIt,则对象只存在于工厂函数中,这会混淆JS引擎并抛出错误.但它没有,它工作正常.为什么这仍然有效?
"use strict"
function factoryFunction(x) {
let returnObject = {
oneParameter: x,
doubleIt: () => returnObject.oneParameter * 2
// doubleIt: () => this.oneParameter * 2
// Why don't I have to use the 'this' version?
}
return returnObject;
}
let newInstance = factoryFunction(10);
console.log(newInstance.doubleIt());
解决方法:
javascript处理这种情况的方式在this这样的文档中详细描述.
这对于大多数人来说并不容易解析,但要点是首先处理任务的左侧.因此在您的示例中,returnObject获取对该对象的引用.之后,评估对象的值.所以它看到你正在使用它已经有引用的returnObject,并且能够在运行时查找oneParameter属性.所有这些都在closure中捕获,这意味着返回的对象可以访问名称returnObject.
要显示它实际上是在运行时进行评估,您可以更改oneParameter然后调用该函数.它按预期工作:
"use strict"
function factoryFunction(x) {
let returnObject = {
oneParameter: x,
doubleIt: () => returnObject.oneParameter * 2
// doubleIt: () => this.oneParameter * 2
// Why don't I have to use the 'this' version?
}
return returnObject;
}
let newInstance = factoryFunction(10);
newInstance.oneParameter = 100
console.log(newInstance.doubleIt());
另外,returnObject不会被复制到新的doubleIt中 – doubleIt只有一个指向returnObject的引用.
内容总结
以上是互联网集市为您收集整理的javascript – 在Factory函数中是对象名称,’this’关键字经常或总是可以互换的?全部内容,希望文章能够帮你解决javascript – 在Factory函数中是对象名称,’this’关键字经常或总是可以互换的?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。