标签:javascript
我理解“this”是调用者对象的引用.
我习惯在代码中看到“this”,如:
var Person = function() {
this.name = "foo";
}
但后来我看到了这些代码:
例1:
function helloWorld1() {
this({ body: "Hello world!" })();
}
例2:
我也看过这段代码:
function helloWorld2() {
this
({ body: "Hello, " })
({ body: "world!" })
();
}
>“这个”在这里意味着什么?
>以上例子中发生了什么?
解决方法:
实际上这可以引用不同的东西,隐含地,它是根据你如何调用一个函数来设置的,例如:
obj.func();
func中的这个值将引用obj.
new Func();
此值将引用从Func.prototype继承的新创建的对象.
func();
该值将引用Global对象.
并且可以使用call或apply方法显式设置值,例如:
function foo () {
alert(this);
}
foo.call("hello world");
您发布的helloWorld1示例仅在此值引用函数时才起作用,该函数返回另一个函数,因为如果您分析该行:
this({ body: "Hello world!" })();
您可以注意到这需要是一个函数,因为您正在调用它,将对象传递给它.而且我们知道返回值也需要是一个函数,因为最后的括号是另一个函数调用.
例如:
var fn = function(o){
return function () {
alert(o.body);
}
};
helloWorld1.call(fn); // or the equivalent
fn.method = helloWorld1;
fn.method();
编辑:要使helloWorld2示例发布工作,此值必须是一个函数,其模式允许我们链接多个函数调用,每次返回相同的函数,直到函数被调用而不带参数,例如:
var fn = (function(){
var msg = '';
return function inner (o) {
if (o) { // called with an argument?
msg += o.body;
} else { // no, show the message
alert(msg);
}
return inner; // return a reference to itself
};
})();
function helloWorld2() {
this
({ body: "Hello, " })
({ body: "my " })
({ body: "world!" })
();
}
helloWorld2.call(fn); // "Hello my world!"
标签:javascript 来源: https://codeday.me/bug/20190610/1212626.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。