进行属性查询时,javascript如何处理`this`?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了进行属性查询时,javascript如何处理`this`?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1692字,纯文字阅读大概需要3分钟。
内容图文
![进行属性查询时,javascript如何处理`this`?](/upload/InfoBanner/zyjiaocheng/670/4957df3799b94d83a9a78d7508ee089f.jpg)
我正在编写一个函数,该函数需要一个对象并在该对象上调用一个方法.我在调用一个函数时无法解决这个问题.
假设我有这个对象:
myObj = {
x: 2,
get: function() {
return this.x;
}
};
如果我只是这样做:
callbackEval = function(fn) {
return fn();
};
然后以
callbackEval(myObj.get)
由于未绑定,因此返回undefined.显然,如果我这样写
callbackEval(function() {
return myObj.get()
});
然后它返回2,正如我期望的那样.
但是,如果我传递一个属性名称,而不是传递回调,而是查找该属性,然后调用该函数,则会得到不同的结果.
假设我写了这些变体:
propEval = function(obj, fnName) {
const fn = obj[fnName];
return fn();
}
propEval2 = function(obj, fnName) {
return obj[fnName]();
}
propEval3 = function(obj, fnName) {
return (obj[fnName])()
}
propEval4 = function(obj, fnName) {
return (obj[fnName] || true)()
}
并这样称呼他们:
propEval(myObj, "get");
propEval2(myObj, "get");
propEval3(myObj, "get");
propEval4(myObj, "get");
然后,我得到:
undefined
2
2
undefined
javascript处理这4种变体之间有什么区别?为什么在propEval2和propEval3中而不是propEval4中进行调用时,为什么要绑定此绑定?
解决方法:
部分答案:坦率地说,这是函数的参数.它是第0个参数,以特殊方式(或以显式方式-带有call和apply)隐藏并传递给它.顺便说一句,也没有方法,只是碰巧是对象属性的函数.如果您通过以下方式调用函数:foo.bar()(=== foo [‘bar’]()),则会将foo作为此绑定隐式传递给它.当您以这种方式调用它时:bar(),您就没有.
因此:propEval-没有对象,没有此绑定.
propEval2-调用所谓“方法”的经典示例.
propEval3-()与此处无关.使用或不使用它们,对表达式的求值是相同的,成员访问运算符和函数调用运算符具有相同的优先级.
propEval4-看起来像上面的那个,不是吗?哈哈!它的实际作用是首先计算表达式(obj [fnName] || true),然后调用结果.可能是
const someTemporaryVariable = obj[fnName] || true;
return someTemporaryVariable();
我认为.
内容总结
以上是互联网集市为您收集整理的进行属性查询时,javascript如何处理`this`?全部内容,希望文章能够帮你解决进行属性查询时,javascript如何处理`this`?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。