发布于2021-10-05 19:30 阅读(1465) 评论(0) 点赞(9) 收藏(4)
没有特殊情况,就是指向全局对象-window
let arr='aa'
function fn(){
alert(this.username);//undefined
}
fn();
因为我声明的方式是let,不会是window对象,
那么当使用var声明
var arr='aa'
function fn(){
alert(this.username); //aa
}
fu();
//---------------
window.arr='aa'
function fn(){
alert(this.username); //aa
}
fn();
//可以理解为
//window.fn();
这个简单理解,就是那个函数调用,this就指向哪里
window.a = 2222
let obj={
b:111,
fn:function(){
alert(this.b);//111
alert(this.a);//undefined
}
}
obj.fn();
很明显,第一次就是输出obj.a,就是111。而第二次,obj没有b这个属性,所以输出undefined,因为this指向obj。
但是,还有一种情况是
let obj1 = {
a:222
};
let obj2 = {
a:111,
fn:function(){
alert(this.a);
}
}
obj1.fn = obj2.fn;
obj1.fn(); //222
这个就是, 虽然obj1.fn是从obj2.fn赋值而来,但是调用函数的是obj1,所以this指向obj1。
let Test = function(){
this.name = '111';
}
let sub = new Test ();
sub .name='cc';
console.log(sub .name); //cc
let sub1 = new Test ();
console.log(sub1.name) //111
构造函数当中的this,指向通过这个构造函数创建出来的实例本身
在构造函数里面返回一个对象,会直接返回这个对象,而不是执行构造函数后创建的对象
let obj = {
name: "haha",
birthDay: 2000,
year: 2021,
}
obj.age();
// call
obj.age.call({
name: "呵呵",
birthDay: 2001,
year: 2051
},"--测试参数--","==测试=="
// apply
obj.age.apply({
name: "嘻嘻",
birthDay: 1900,
year: 2051
},["--测试参数01--","==测试参数02=="]
// bind
let ageFunc = obj.age.bind({
name: "bind",
birthDay: 19,
year: 20
});
console.log(ageFunc);
ageFunc()
原文链接:https://blog.csdn.net/weixin_57774738/article/details/120587520
作者:前端黄柠檬
链接:http://www.qianduanheidong.com/blog/article/197928/8799edc0033e9e8185bf/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!