傲娇学习笔记之——【self 对象】

本文探讨了self和window对象之间的区别,特别是在WebWorker多线程环境中。self在主线程中等同于window,但在Worker线程中代表其自身的全局对象,无法访问主线程的DOM对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

self对象

最近在学习new worker创建新线程的相关知识。然后发现子线程里面各种对self的使用。

基础知识相当不扎实的我有点懵逼,self 和 window 之间区分的原理到底是什么?

于是呢,我做了个实验:

<!DOCTYPE html>
<html>
    <head>
        <script>
            window.onload = function() {
                console.log(window === self);
                console.log(window === window.self);
                console.log(this === window);
                console.log(this === self);
            };
        </script>
    </head>
    <body>
    </body>
</html>

结果:
在这里插入图片描述
(吼吼~我就知道是这样,要不我怎么会分不清呢!)

其实 self 就是为了与 parent 对象对立的有语义的对象吧!本质上和window对象是一个概念。

嗯嗯,没错,在H5一些新特性出来之前事实就是这样的。

在H5的新规范中,提出了通过 Web Worker 来实现多线程的技术。

阮一峰的Web Worker 使用教程里面是这么说的:

Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。
Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用document、window、parent这些对象。但是,Worker 线程可以navigator对象和location对象。

很秀吧!多线程肯定是比单线程快很多的了。

但是,人家也说了,在worker线程中,window对象不能用了,因为worker线程跟主线程不一样,只有主线程才能操作DOM对象。所以就出现了我一开始提出的疑问,为啥worker子线程里面用的对象是全都是self了,这里的 self 指的是子线程自身,即子线程的全局对象。

也就是说web worker的出现赋予了self真实存在的意义!

了解!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值