首页
友链
壁纸
留言
今日热榜
更多
关于
时光
推荐
精品流量卡
Search
1
都二十多年了,你的梦为什么还没碎!
57,091 阅读
2
2022年5个好用的 BT/ 磁力链接下载工具推荐 |Windows 、安卓系统
37,427 阅读
3
nps内网穿透实现外网访问树莓派
32,429 阅读
4
实践利用宝塔建emlog个人博客-超详细【原创】
26,137 阅读
5
Typecho-Joe-Theme主题帮助文档
24,653 阅读
闲杂乱码
Python
网站源码
微信小程序
娱乐分享
Is相册
软件工具
登录
Search
标签搜索
PHP
HTML
API
Javascript
源码
JS
Vue
Github
CloudFlare
接口
函数
SQL
ASP.NET
MVC
EF
T4模板
后台管理
CDN
微信小程序
MAC
韩小韩
累计撰写
262
篇文章
累计收到
1,308
条评论
首页
栏目
闲杂乱码
Python
网站源码
微信小程序
娱乐分享
Is相册
软件工具
页面
友链
壁纸
留言
今日热榜
关于
时光
推荐
精品流量卡
搜索到
108
篇与
娱乐分享
的结果
2021-09-09
斐讯K2推荐稳定高格固件 - 王者荣耀不跳ping呲溜呲溜
{message type="info" content="博主手里有一台 斐讯K2 路由器,3年了吧,非常给力!然后我是一个非常爱捣鼓的男孩子,没事的时候就刷刷路由器,十来分钟半个小时就OK了,每次刷完都会测试比较,试试哪个固件好用啊,稳不稳定呀。然后博主以王者荣耀为例,大部分固件5G的WI-FI打王者荣耀,相对来说时稳定的,跳Ping跳的少,少部分固件2.4G的WI-FI就不太行了,疯狂跳Ping,基本算是玩不下去。最最最后,博主刷了差不多全网大部分支持K2的固件吧,最最最后还是选择了高格的固件。推荐高格固件的原因,很稳定很稳定!但是,高格的K2固件也分版本,下面把博主用的固件分享给各位小伙伴。"/}K2通用固件{callout color="#f0ad4e"}博主刷过 潘多拉,Openwrt,PandoraBox,极客盒子,K2官改,荒野无灯,老毛子各种版本包括网上传的那个打王者荣耀不卡的那个PandoraBox北纳星版本的博主也刷过,这个固件,界面卡的一批,5G的WI-FI打王者疯狂跳,可能是博主路由器问题,和网上传的不太一样,反正博主刷了体验很不好,各位可以自己斟酌其他固件就不一一列举了,等等看下面图片{/callout}以上固件斐讯K2都可刷,需要的话可以联系博主高格K2固件高格的K2固件分底包和升级包 {callout color="#604def"}关于底包,即刷机包,.bin 文件,底包博主就见过好多版本最后选择了高格官方群里面的新底包,链接放下面{/callout}{cloud title="高恪K2-刷机专用固件(新底包)" type="lz" url="https://ohan.lanzoui.com/iUBhMttbh0b" password=""/}{callout color="#604def"}关于升级包,各种版本的多了去了,博主测试了 4.1.XXX版本的大部分和4.3.XXX版本的大部分,效果不是很理想,最终选择了最最最稳定的高格官方群里面的 GOCLOUD高恪-S1A_8M(K2稳定)-3.3.1.9182 升级包,链接放下面{/callout}{cloud title="高恪K2-S1A_8M(K2稳定升级包)-3.3.1.9182" type="lz" url="https://ohan.lanzoui.com/iebMQttbncj" password=""/}斐讯K2刷高格固件步骤刷机 进入Breed -> 恢复Config公版 -> 升级固件 -> 选择 「高恪K2-刷机专用固件(新底包)」更新即可升级包 最后放一张博主的
2021年09月09日
3,625 阅读
21 评论
2 点赞
2021-09-09
树莓派延时摄影并把所有jpg图片转mp4视频成品
{callout color="#f0ad4e"}树莓派吃灰多年了,想着让他焕发下第二春。于是想想想想想搞了个延时摄影,搞完以后,发现图片合成视频成了一个问题,博主百度ANDgoogle了好多方法都太麻烦,然后博主整合了一下分享给大家。{/callout}延时摄影代码需要 python 环境新建 你喜欢的名字.py 文件填入以下代码import picamera import time def getCurrentTime(): (year, month, day, hour, minute, second, _, _, _) = time.localtime() ret = "%04d%02d%02d%02d%02d%02d" % (year, month, day, hour, minute, second) return ret camera = picamera.PiCamera() prefix = "yanshi" #保存的图片前缀 path = "./TimePhoto/" #图片保存的目录 while True: suffix = getCurrentTime() filename = path + prefix + "_" + suffix + ".jpg" #图片全名 camera.capture(filename) time.sleep(15) #延时15秒拍摄一张图片,根据自己喜好来(建议不低于5秒){callout color="#ef4d4d"}博主从上午9点多启动放在那里,因为没有夜视功能,所以到傍晚7点多天黑了就停止拍摄了,一共拍了2000多张(删除了部分天黑时的全黑图片){/callout}JPG图片转MP4视频代码需要安装 ffmpeg 自行安装ffmpeg -framerate 12 -pattern_type glob -i '*.jpg' -c:v libx264 -profile:v high -crf 12 -pix_fmt yuv420p 你喜欢的合成后视频的名字.mp4 {callout color="#ef4d4d"}由于博主拍了一整天,合成的视频太大了,就不放了!👋👋👋{/callout}
2021年09月09日
603 阅读
2 评论
0 点赞
2021-09-03
nano 使用教程 - Linux 中适合新手的文本编辑器
{message type="info" content="网上大部分 Linux 相关教程在涉及文本编辑操作时都是选择的 Vim 编辑器,对于新手来说如何退出成了最大的难题。其实除了 Vim 之外还有别的选择,那就是 nano 。上手 nano 几乎是零学习成本,而且对于只改几行配置文件这样的简单操作,nano 的用户体验完全吊打 Vim。"/}安装一般系统都内置了 nano 编辑器,如果没有,可以自己安装。 CentOS 系统:yum install -y nanoDebian/Ubuntu 系统:apt-get install -y nano基本操作语法nano <文件名或文件绝对路径>使用示例nano vvhan.com.txt nano /root/vvhan.com.txt{callout color="#f0ad4e"}当你打开一个不存在的文件,那么即为新建文件。打开文件后,就可以直接编辑了。{/callout}光标控制移动光标:使用用方向键移动。选择文字:按住鼠标左键拖动(然后就可以复制了)。复制文本这取决于你用的是什么 SSH 软件。Putty 要复制文本是选择要复制的文本点击鼠标左键即可。Xshell 要复制文本则是选择要复制的文本按下 Ctrl+INSERT 键。粘贴文本这取决于你用的是什么 SSH 软件。Putty 要粘贴文本点击鼠标右键即可。Xshell 要粘贴文本则是按下 Shift+INSERT 键。快捷键{callout color="#f0ad4e"}打开文件后,下方有一堆文字,那就是快捷键说明。例如:^G 即为 Ctrl+G ,功能为显示帮助文本。{/callout}Ctrl+G,显示帮助文本Ctrl+O,保存当前文件Ctrl+R,读取其他文件并插入光标位置Ctrl+Y,跳至上一屏幕Ctrl+K,剪切当前一行Ctrl+C,显示光标位置Ctrl+X,退出编辑文本Ctrl+J,对其当前段落(以空格为分隔符)Ctrl+W,搜索文本位置Ctrl+V,跳至下一屏幕Ctrl+U,粘贴文本至光标处Ctrl+T,运行拼写检查Ctrl+_,跳转到某一行ALT+U,撤销ALT+E,重做ALT+Y, 语法高亮ALT+#,显示行号进阶使用{callout color="#f0ad4e"}基本操作都玩转了,下面就来点骚操作。{/callout}nano 配置文件(~/.nanorc)下面配置因人而异,可以选择性添加,不过一般向类似:制表符宽度,隐藏帮助,显示行号,语法高亮,以及平滑卷屏等基本上是必开的选项。set tabsize 4 # 设置制表符宽度 set autoindent # 允许自动缩进 set cut # 设置 CTRL-K 可以剪贴到行末 set noconvert # 不要转换 DOS/UNIX 换行符 set nowrap # 不要自动换行 set nohelp # 不显示下面两行帮助 set morespace # 隐藏标题下的空白行,换取更多编辑空间 set smooth # 平滑卷屏 set suspend # 允许 ctrl-z 将 nano 置于后台 set smarthome # 第一次 Home 跳到行首非空字符,第二次到行首 set tabstospaces # 展开制表符为空格(如果需要的话) set mouse # 允许鼠标 set linenumbers # 显示行号(可以在编辑时 ALT-# 切换) set backupdir path # 设置备份路径 set backup # 允许保存备份 set casesensitive # 搜索使用大小写敏感 set multibuffer # 使用 CTRL-r 读取文件时,默认读取到新缓存 set nonewlines # 不在文件末尾添加新行 include <filename> # 加载额外配置,通常是 /usr/share/nano 下的各种语法文件语法高亮nanorc 是一个改善 nano 语法高亮的项目,如果你的系统没有 nano 的语法高亮文件,可以安装它。curl https://raw.githubusercontent.com/scopatz/nanorc/master/install.sh | sh
2021年09月03日
461 阅读
2 评论
0 点赞
2021-08-24
树莓派挂载固态硬盘安装系统并入门设置 - 史上最详细版(原创)
{message type="info" content="树莓派虽小,但五脏俱全和普通电脑无异。电脑能做的大部分事情,在树莓派上都能做,而树莓派以其低能耗、移动便携性、GPIO等特性,很多在普通电脑上难以做好的事情,用树莓派却是很适合的。"/}树莓派系统安装在固态硬盘博主使用MAC,用 balenaEtcher 烧录树莓派系统到 内存卡/硬盘 中,由于博主用的是1T的蓝盘,下面将用硬盘来说明。烧录好以后 创建一个 SSH 空文件放在硬盘中(为了使用SSH链接树莓派)安装好以后,启动树莓派并插上网线,博主使用 LanScan 扫描局域网IP树莓派名字叫 Raspbian ,找到设备并记录IP,SSH连接即可#连接指令 ssh pi@IP #默认密码:raspberry{callout color="#f0ad4e"}到此,树莓派安装完成!{/callout}树莓派安装vim我喜欢使用vim,所以使用树莓派的第一件事就是安装vimsudo apt-get install vim树莓派换国内源树莓派默认为国外的源,所以换国内源快些,博主使用的是清华大学的源树莓派备份源sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak树莓派换国内源 修改 sources.list 文件sudo vim /etc/apt/sources.list内容替换为deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi修改 raspi.list 文件sudo vim /etc/apt/sources.list.d/raspi.list内容替换为deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui同步更新一下sudo apt-get update sudo apt-get upgrade启用树莓派VNC服务sudo raspi-config依次操作:Interfacing Options -> VNC -> Yes。之后系统会提示你是否要安装 VNC 服务,选择YES,一切顺利的话 VNC 服务就启动了!设置树莓派VNC的分辨率如果不设置树莓派VNC的分辨率,会导致黑屏sudo raspi-config{callout color="#f0ad4e"}博主喜欢大分辨率,就选择了 1920*1080{/callout}设置好后随手更新一下系统,就OK了树莓派设置中文界面和时间区域树莓派安装中文字体sudo apt-get -y install ttf-wqy-zenhei树莓派设置显示中文sudo raspi-config依次选择 Localisation Options --> Locale{callout color="#f0ad4e"}操作提示:按空格键在前面打勾或去掉勾(星号=勾),PageUp PageDown快速翻页,Tab键跳到OK按钮上去掉en_GB.UTF-8 UTF-8,勾上:“en_US.UTF-8 UTF-8”、“zh_CN.UTF-8 UTF-8”、“zh_CN.GBK GBK”{/callout}{callout color="#f0ad4e"}下一屏幕默认语言选 “zh_CN.UTF-8”{/callout}树莓派安装中文输入法sudo apt-get -y install scim-pinyin #如要加装五笔输入法,再执行 #sudo apt-get -y install scim-tables-zh树莓派修改时间区域sudo raspi-config重启即可sudo reboot{callout color="#f0ad4e"}重启完毕就可以用 VNC 服务了{/callout}树莓派可视化操作连接VNC博主使用 VNCViewer 连接VNC连接树莓派工具下载 {cloud title="VNC官方下载" type="default" url="https://www.realvnc.com/en/connect/download/viewer/" password=""/}输入IP地址,然后回车默认账号:pi 默认密码:raspberry{callout color="#f0ad4e"}连接好以后,直接 Next ,第一步提示修改密码即可设置新的密码{/callout}{callout color="#f0ad4e"}然后连接 WI-FI,因为博主用的网线,直接 Skip,后期可自己连接WI-FI然后更新{/callout}然后重启sudo reboot树莓派外接1T硬盘真的舒服!
2021年08月24日
10,404 阅读
4 评论
1 点赞
2021-07-03
RK84三模(蓝牙/2.4G/有线)键盘说明书 - 完整
今天入手了RK84 三模(蓝牙/2.4G/有线)键盘{callout color="#ef4d4d"}但是它 没有 说明书!!!!!!{/callout}关于RK84{message type="info" content="原厂红轴+三模(2.4G+蓝牙 5.1),84键布局,便宜!键盘支持白色背光,特效也算是RK的标配了,待机状态下背光会自动关闭,配合3750毫安的电池,续航表现还是很值得期待的(官方宣称关灯30天,开灯10天)外框可以拆除,拆了就是悬浮式键盘,便于清理之余也算是提供不一样的使用体验吧。不过笔者是不建议拆掉外框的,拆掉之后大塑料底板就露出来了,拉低了整个键盘的颜值。300元价位内将原厂轴、三模蓝牙等结合在一起,应该是目前这个价位的性价比之王。做工尚可,背光均匀,没有出现过去RK常见的断链、卡顿情况。有线模式自带两个USB口,有效拓展了使用场景。"/}RK84 三模(蓝牙/2.4G/有线)键盘兼容{message type="info" content="Windows2000、XP Vista、Win7、Win8、Win10、MacOS、Android 及 ios 等系统设备。"/}多媒体快捷键 Fn+F1 计算机Fn+F5 播放器Fn+F9 下一曲Fn+F2 浏览器Fn+F6 停止Fn+F10 静音Fn+F3 邮箱Fn+F7 上一曲Fn+F11 音量-Fn+F4 计算器Fn+F8 播/暂停Fn+F12 音量+Fn+A 切换为 win系统Fn+S切换为 Mac 系统 {callout color="#f0ad4e"}MAC 系统布局,WIN 键和 ALT 键功能位置互换,WIN 系统布局,按键功能正常。{/callout}三模(蓝牙/2.4G/有线)切换/配对方法有线模式: 开关拨至 OFF 连接 USB 至设备,即可使用有线模式2.4G 模式: 如下图,键盘背部两个开关,开关 1 拨到 ON 状态,开关 2 拨到 G 状态。蓝牙模式: 如下图,键盘背部两个开关,开关 1 拨到 ON 状态,开关 2 拨到 B 状态蓝牙配对方法:开关 1 拨到 ON 状态,开关 2 拨到 B 状态FN+Q/W/E.任意一组长按对码,比如 Fn+Q,此时 Q 键持续闪烁闪烁,表示已进入配对状态打开设备蓝牙(电脑/手机/平板)搜索名为:BT3.0 Keyboard(连接 PC 端 Windows7 以下系统),BT5.0 KB(l连接 Windows8 以上系统版本,移动设备等)完成连接{callout color="#f0ad4e"}以此类推:重复以上步骤,Q/W/E 可存储 3 组蓝牙设备,在使用切换时 短按 Fn+Q/W/E,即可在不同蓝牙设备之间切换(温馨提示:使用切换前,请先配对好 3 组蓝牙){/callout}背光亮度/速度设置{callout color="#964def"}Fn+HOME 多种背光模式切换(因为方案不同,具体模式数量请实物为准)Fn+↑ 背光亮度增加Fn+↓ 背光亮度减小Fn+← 动态变换速度减小Fn+→ 动态变换速度增加{/callout}组合功能键{callout color="#ef4da4"}FN+DEL=SCRLKFN+PGUP=PAUSEFN+PGDN=END{/callout}其他设置{callout color="#4defc1"}Fn+Win 锁定/解锁 win 键在键盘使用过程中,为了防止误触 windows 键,可通过 Fn+Win 停用/启用 windows 键功能{/callout}恢复出厂设置 (清除RK84已经配对的蓝牙设备){callout color="#ef4d4d"}Fn+空格键 恢复出厂设置在键盘使用过程中,可通过 Fn+空格键 5 秒恢复出厂设置,此时会默认为出厂状态,之前连接的蓝牙设备等都会被清除。{/callout}
2021年07月03日
2,508 阅读
0 评论
4 点赞
2021-06-30
域名出售 骨折价出售
{message type="info" content="手里域名太多了,没地方用了,都是老域名。看上的直接滴滴。 "/} {anote icon="fa-link" href="http://wpa.qq.com/msgrd?v=3&uin=1655466387&site=qq&menu=yes" type="secondary" content="购买联系"/}function h_day(s, e) {return (Date.parse(e) - Date.parse(s)) / (1 * 24 * 60 * 60 * 1000);};function h_now() {const date = new Date();return `${date.getFullYear()}.${date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1}.${date.getDate() < 10 ? `0${date.getDate()}` : date.getDate()}`;}域名 7pq.net{message type="success" content="售价: 198 "/}7pq.net 注册时间:2021年07月20日 到期时间:2022年07月20日今天是:document.write(h_now())距离到期还有:document.write(h_day(h_now(), '2022.07.20'))天域名 akm5.com (已出){message type="error" content="售价: 私聊 "/}akm5.com 注册时间:2019年06月14日 到期时间:2022年06月14日今天是:document.write(h_now()) 距离到期还有:document.write(h_day(h_now(), '2022.06.14'))天域名 hanmilk.com{message type="success" content="售价: 58 "/}hanmilk.com 注册时间:2018年07月19日 到期时间:2022年07月19日今天是:document.write(h_now()) 距离到期还有:document.write(h_day(h_now(), '2022.07.19'))天域名 han8.net{message type="success" content="售价: 98 "/}han8.net 注册时间:2019年02月17日 到期时间:2023年02月17日今天是:document.write(h_now()) 距离到期还有:document.write(h_day(h_now(), '2023.02.17'))天域名 4ce.cn (已出){message type="error" content="售价: 88 "/}4ce.cn 注册时间:2020年05月31日 到期时间:2022年5月31日今天是:document.write(h_now()) 距离到期还有:document.write(h_day(h_now(), '2022.05.31'))天域名 8ov.cn (已出){message type="error" content="售价: 68 "/}8ov.cn 注册时间:2020年08月31日 到期时间:2022年08月31日今天是:document.write(h_now()) 距离到期还有:document.write(h_day(h_now(), '2022.08.31'))天
2021年06月30日
1,821 阅读
12 评论
7 点赞
2021-06-25
Window 系统秒变 Mac 超高颜值 系统级主题 - MyDockFinder
Window 系统秒变 Mac,仿真程度高达 99%{message type="info" content="相信用过苹果电脑的小伙伴一定觉得 Mac 的 Dock 栏真的是简洁又干净!但是苹果笔记本比较倾向于高消费者!那么就有了这么一个软件:MyDockFinder 此软件的神奇之处就是几乎还原了 Mac OS 系统原来的样子,装上几乎看不出这是 window 系统摇身一变而来!"/}话不多说,直接上视频看咱的成果{dplayer src="https://oss.4ce.cn/api?path=/www.vvhan.com/win-mac.mp4&raw=true"/}软件官方网站:{anote icon="fa-link" href="https://www.mydockfinder.com/" type="secondary" content="MyDockFinder"/}官网介绍{callout color="#f0ad4e"}系统级模糊效果{/callout}运行程序图标显示窗口预览 {callout color="#f0ad4e"}所有运行图标并且有窗口的程序可以鼠标悬停后显示窗口预览(支持 win10UWP 程序)需要在 dock 偏好设置 - 预览中开启,可自定义预览大小及延迟时间。{/callout}文件 (夹) 直接拖放进 dock {callout color="#f0ad4e"}所有文件 (包括 UWP 快捷方式) 及文件夹可直接托放进 dock 中,可多个文件 (夹) 批量拖入;管理员账号 administrator 和管理员模式运行时不会有此动画效果,所以不建议使用管理员账号和管理员模式运行。{/callout}微信、QQ、钉钉消息提示 {callout color="#f0ad4e"}支持 QQ、TIM、微信(UWP 微信)、阿里旺旺、YY 等软件消息计数和提示效果,此消息计数算法为原创 QQ 等其他软件并没有公开接口所以不能显示具体聊天内容。{/callout}显示当前城市天气 {callout color="#f0ad4e"}添加系统图标 - 实时天气 可添加天气图标,使用高德地图 API 自动定位并获取实时及未来天气,dock 图标为实时天气 预览窗口为未来天气,所以图标会和预览显示天气有所出入。{/callout}图标显示任务进度 {callout color="#f0ad4e"}支持复制文件、chrome 等浏览器下载、foobar 播放音乐、potplayer 播放视频等,当系统任务栏窗口图标显示进度时,dock 中对应的图标就会显示进度条。{/callout}窗口最小化到 dock {callout color="#f0ad4e"}自带三种窗口最小化效果 99% 模拟 mac 窗口动画,可在 dock 偏好设置 - 最小化中勾选开启,最小化动画采用 D3D 硬件加速渲染,win8 以上系统可以使用完整 DX11 效果。{/callout}显示完整文件夹内容 {callout color="#f0ad4e"}添加文件夹后图标右键菜单可修改显示文件夹内缩略图和文件内容排序方式,左键点击可显示完成文件夹内所有文件,点击文件夹内二级目录可再次显示下级目录所有文件,文件名显示不全时鼠标悬停后可显示全部名称;支持绝大多数视频格式(需要下载 opencv_ffmpeg410.dll 视频解码文件),文件夹中的文件还支持拖拽操作可以直接鼠标拖出移动或复制。{/callout}
2021年06月25日
920 阅读
0 评论
3 点赞
2021-06-23
手撸实现 call apply bind 原型函数
{message type="info" content="今天 Joe 老板又给我补课了,他问我call apply bind会用吗,我说会,他又说,把原型函数实现给我写一下,我一下懵逼了,原理,他是来羞辱我的,经过一下午的不懈努力,Joe 老板终于教会了我。"/}实现call{message type="warning" content="call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数为null、undefined的时候,默认指向window。"/}{callout color="#f0ad4e"}call传参时,是传入1个或多个参数,所以,需要用...展开{/callout}/* 随便定义一个对象,待会将函数内的this指向指向倒这个对象 */ const obj = { name: '我是需要被绑定改变this指向的对象' } /* 需要改变this指向的函数,没有使用call时,this指向window */ function fn(a, b) { console.log(`This 现在指向 ${this}`); console.log(`传入的 a 是 ${a} ------- b 是 ${b}`); } /* * * 重写call方法 * _this 需要把this改变到哪个目标 * vvhan_com 传递进来的参数 */ Function.prototype.call = function (_this, ...vvhan_com) { /* 创建一个 Symbol call */ const call = Symbol(); /* 给传入的对象 _this 添加call元素为 this(此处this为 fn 函数体) */ _this[call] = this /* 执行 _this对象 中的 call 函数,并传入参数 vvhan_com */ _this[call](...vvhan_com); /* 最后删除 _this对象 中的call元素 */ delete _this[call]; } fn.call(obj, 1,2);实现apply{message type="warning" content="apply接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。"/}{callout color="#f0ad4e"}apply传参时,是传入一个数组,数组里面是参数,所以,不需要用...展开{/callout}/* 随便定义一个对象,待会将函数内的this指向指向倒这个对象 */ const obj = { name: '我是需要被绑定改变this指向的对象' } /* 需要改变this指向的函数,没有使用apply时,this指向window */ function fn(a, b) { console.log(`This 现在指向 ${this}`); console.log(`传入的 a 是 ${a} ------- b 是 ${b}`); } /* * * 重写apply方法 * _this 需要把this改变到哪个目标 * vvhan_com 传递进来的参数 */ Function.prototype.apply = function (_this, vvhan_com) { /* 创建一个 Symbol apply */ const apply = Symbol(); /* 给传入的对象 _this 添加apply元素为 this(此处this为 fn 函数体) */ _this[apply] = this /* 执行 _this对象 中的 apply 函数,并传入参数 vvhan_com */ _this[apply](...vvhan_com); /* 最后删除 _this对象 中的apply元素 */ delete _this[apply]; } fn.apply(obj, [1, 2]);实现bind{message type="warning" content="和call很相似,第一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。bind返回值是函数"/}{callout color="#f0ad4e"}因为bind的调用方式,是返回一个新函数,在调用一次,例如:fn.bind(null)(options),所以需要用到高阶函数{/callout}/* 随便定义一个对象,待会将函数内的this指向指向倒这个对象 */ const obj = { name: '我是需要被绑定改变this指向的对象' } /* 需要改变this指向的函数,没有使用bind时,this指向window */ function fn(a, b) { console.log(`This 现在指向 ${this}`); console.log(`传入的 a 是 ${a} ------- b 是 ${b}`); } /* * * 重写bind方法 * _this 需要把this改变到哪个目标 * vvhan_com 传递进来的参数 */ Function.prototype.bind = function (_this, ...vvhan_com) { /* 创建一个 Symbol bind */ const bind = Symbol(); /* 给传入的对象 _this 添加bind元素为 this(此处this为 fn 函数体) */ _this[bind] = this /* 返回函数 并传入参数 这里使用高阶函数接收参数 */ return function (...vvhan_com_) { /* 判断参数传入点 并执行 */ _this[bind](...vvhan_com_.length > 0 ? vvhan_com_ : vvhan_com); /* 最后删除 _this对象 中的bind元素 */ delete _this[bind]; } } fn.bind(obj, 1, 2); fn.bind(obj)(1, 2);最后总结相同点 {callout color="#f0ad4e"}call、apply、bind的作用都是改变函数运行时this的指向,bind返回对应函数=>便于稍后调用; apply, call则是立即调用。{/callout}区别点 {callout color="#f0ad4e"}apply 和 call 的用法几乎相同, 唯一的差别在于:当函数需要传递多个变量时, apply 传入一个数组作为参数输入, call 则是接受一系列的单独变量。{/callout}
2021年06月23日
192 阅读
4 评论
0 点赞
1
...
4
5
6
...
14