JavaScript之this和window

JavaScript之this和window

引言

  在我们日复一日的工作和学习中,总有一些内容是我们必须得牢牢掌握并可以熟练运用的。this和window就在其中。下面,我对这两个关键字做了一些总结,希望可以帮助到大家。

window对象

  所有浏览器都支持 window 对象。它代表浏览器的窗口。所有全局 JavaScript 对象,函数和变量自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。甚至(HTML DOM 的)document 对象也是 window 对象属性。平常经常用到的是window的子对象。

document 页面

document是我们进行js操作必须接触的,这里是一些必要的选择器,本篇文章不做重点介绍,如果看官想要了解详细信息,可以去我的主页看DOM选择器的介绍

history 历史记录

History 对象包含用户(在浏览器窗口中)访问过的 URL。
history.back() 加载历史列表中的前一个 URL(如果存在)。
history.forward() 加载历史列表中的下一个 URL。
history.go(0):可以刷新当前网页

location 地址url

Location 对象包含有关当前 URL(统一资源定位符) 的信息。(Uniform Resource Location),可通过 window.location 属性来访问。常见的一个操作是:
location.href 返回完整的 URL。
location.assgin() 使窗口载入并显示指定URL中的文档,保留浏览历史;

navigator 浏览器信息

navigator.appName 返回浏览器的名称。
navigator.platform 返回运行浏览器的操作系统平台。

screen 屏幕

Screen 对象包含有关客户端显示屏幕的信息。
screen.height 返回显示屏幕的高度。 width 返回显示器屏幕的宽度。
screen.availHeight 显示屏幕的可用高度 (除 Windows 任务栏之外)。
screen.availWidth 显示屏幕的可用宽度 (除 Windows 任务栏之外)。

this关键字

这是本篇博客重点讲解的,也是工作学习中必备的,请大家自习阅读。
1、数执行时,this总是指向调用该函数的对象(即:判断this所在的函数属于谁)。

	function fun(){
        console.log(this.n);
    }
    var obj = {};
    obj.n = "在这里";
    obj.m = fun;
    obj.m();    //执行结果为:在这里

2、函数没有所属对象时,就指向全局对象(window)

 	var n = "指我";
    function fun(){
        console.log(this);
    }
    console.log(window.n);//指我
    console.log(this.n);  //指我    
    fun();//

执行结果:
在这里插入图片描述
3、作为构造函数使用时,this 指的是构造函数生成的对象

	function fn(){
        this.x = 123; //this是调用该函数的obj对象
    }
    var obj = new fn(); //执行结果为:obj = {x:123}

4、怎么改变this的指向呢?
bind()方法
bind的功能是什么?
第一个参数:
改变当前函数的this的指向
怎么改?
bind的第一个参数,就是改变之后的this的指向
bind自身只会改变函数中的this,暂时不会执行,只会将改变之后的新函数,返回
bind返回的新函数,中的this指向,必然指向bind的第一个参数。
后面所有参数:除了第一个参数,后面所有参数,会作为正常实参,传给新函数

    注意:bind自身并不会自动执行这个返回的新函数,如果有需要,得自己手动执行
 

    示例代码如下:
	function fun(){
        console.log(this);
    }
    fun();
    var obj={a:"haha"};
    fun.bind(obj);
    obj.fun=fun;
    obj.fun();

执行结果:
在这里插入图片描述
apply方法
apply 方法作用是改变函数的调用对象,此方法第一个参数为改变后的调用函数的对象,函数里this指第一个参数。
示例代码及执行结果如下:

	var x = 11;
    function fn(){
        console.log(this.x)    
    }
    var obj = {fn:fn,x:"22"}
    var obj2 = {x:"33"}
    obj.fn.apply(); // 11 ,apply()参数为空时,默认调用的是全局对象,this当前指全局对象
    obj.fn.apply(obj); // 22
    obj.fn.apply(obj2); // 33

结语

程序猿的路上,且行且学,永不止步!!!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值