"ths" in JavaScript

【国产化信创实践】THS(TongHttpServer)中间件Nginx替代性能对比 2)当进程数都为8时,并发量小于10000时,THS与Nginx(进程数为8)性能差不多;1.本场景主要对比为THS和nginx都部署了同样的前端静态工程的情况下,做前端页面请求压力测试对比响应时间。1.本场景主要对比ths和nginx反向代理同一后端服务,做服务调用的压力测试对比响应时间。总结: 1)随着进程数增大,TongHttpServer相对而言响应减慢;2)作为应用容器来说,默认参数下ths与nginx相差不大;总结:1)THS随着进程数加大,响应时间越来越快;4.启动,进入bin目录,执行。 阅读详情

NOTICE:

This article is refered from http://www.quirksmode.org/js/this.html

 

One of the most powerful JavaScript keywords is this. Unfortunately it is hard to use if you don't exactly know how it works.

Below I explain how to use it in event handling. Later on I'll add some information about other uses of this.

Owner

The question that we'll discuss for the remainder of the page is: What does this refer to in the function doSomething()?

function doSomething() {
   this.style.color = '#cc0000';
}

In JavaScript this always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. When we define our faithful function doSomething() in a page, its owner is the page, or rather, the window object (or global object) of JavaScript. An onclick property, though, is owned by the HTML element it belongs to.

This "ownership" is the result of JavaScript's object oriented approach. See the Objects as associative arrays page for some more information.

------------ window --------------------------------------
|                                          / /           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   | HTML element | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          --------------------                          |
|          | onclick property |                          |
|          --------------------                          |
|                                                        |
----------------------------------------------------------

If we execute doSomething() without any more preparation the this keyword refers to the window and the function tries to change the style.color of the window. Since the window doesn't have a style object the function fails miserably and produces JavaScript errors.

Copying

So if we want to use this to its full extent we have to take care that the function that uses it is "owned" by the correct HTML element. In other words, we have to copy the function to our onclick property. Traditional event registration takes care of it.

element.onclick = doSomething;

The function is copied in its entirety to the onclick property (which now becomes a method). So if the event handler is executed this refers to the HTML element and its color is changed.

------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   | HTML element | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |copy of doSomething()|  <-- copy function    |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------

The trick is of course that we can copy the function to several event handlers. Each time this will refer to the correct HTML element:

------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   | HTML element | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |copy of doSomething()|  <-- copy function    |
|          -----------------------          |            |
|                                           |            |
|   -----------------------                 |            |
|   | another HTML element| <-- this        |            |
|   -----------------------     |           |            |
|               |               |           |            |
|          -----------------------          |            |
|          |copy of doSomething()|  <-- copy function    |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------

Thus you use this to the fullest extent. Each time the function is called, this refers to the HTML element that is currently handling the event, the HTML element that "owns" the copy of doSomething().

Referring

However, if you use inline event registration

<element οnclick="doSomething()">

you do not copy the function! Instead, you refer to it, and the difference is crucial. The onclick property does not contain the actual function, but merely a function call:

doSomething();

So it says “Go to doSomething() and execute it.” When we arrive at doSomething() the this keyword once again refers to the global window object and the function returns error messages.

------------ window --------------------------------------
|                                          / /           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   | HTML element | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------         / /           |
|          | go to doSomething() |          |            |
|          | and execute it      | ---- reference to     |
|          -----------------------       function        |
|                                                        |
----------------------------------------------------------

The difference

If you want to use this for accessing the HTML element that is handling the event, you must make sure that the this keyword is actually written into the onclick property. Only in that case does it refer to the HTML element the event handler is registered to. So if you do

element.onclick = doSomething;
alert(element.onclick)

you get

function doSomething()
{
	this.style.color = '#cc0000';
}

As you can see, the this keyword is present in the onclick method. Therefore it refers to the HTML element.

But if you do

<element οnclick="doSomething()">
alert(element.onclick)

you get

function onclick()
{
	doSomething()
}

This is merely a reference to function doSomething(). The this keyword is not present in the onclick method so it doesn't refer to the HTML element.

Examples - copying

this is written into the onclick method in the following cases:

element.onclick = doSomething
element.addEventListener('click',doSomething,false)
element.onclick = function () {this.style.color = '#cc0000';}
<element οnclick="this.style.color = '#cc0000';">
Examples - referring

In the following cases this refers to the window:

element.onclick = function () {doSomething()}
element.attachEvent('onclick',doSomething)
<element οnclick="doSomething()">

Note the presence of attachEvent(). The main drawback of the Microsoft event registration model is that attachEvent() creates a reference to the function and does not copy it. Therefore it is sometimes impossible to know which HTML currently handles the event.

Combination

When using inline event registration you can also send this to the function so that you can still use it:

<element οnclick="doSomething(this)">

function doSomething(obj) {
	// this is present in the event handler and is sent to the function
	// obj now refers to the HTML element, so we can do
	obj.style.color = '#cc0000';
}
THS vs Nginx:如何根据业务场景选择最适合的Web服务器? 本文深入对比了国产中间件TongHttpServer(THS)与Nginx在Web服务器选型中的核心差异。文章从架构设计、静态资源服务、反向代理、负载均衡及企业级特性等多维度分析,旨在帮助技术决策者根据自身业务场景、团队技能和合规要求,做出最合适的选型决策,而非单纯追求性能数据。 阅读详情

相关推荐

【刷题】将字符串中的所有元音字母删除,返回删除后的新字符串(js)

原题目: Trolls are attacking your comment section! A common way to deal with this situation is to remove all of the vowels from the trolls’ comments, neutralizing the threat. Your task is to write a fun...

牛晓林的博客 1472

你不知道的JS(四):ths机制

this的作用、指向判断和修改this指向的call、apply、bind方法的实现。

weixin_51670675的博客 419

HTML基础与进阶指南:THS_Guide

HTML(HyperText Markup Language)是构建网页内容和结构的标准标记语言。它不仅是互联网的基石,也是一切网页开发的起点。理解HTML的基础结构和元素是成为前端开发者的关键第一步。HTML5是超文本标记语言的最新版本,自2014年10月28日成为推荐标准以来,它为Web开发人员带来了许多新的特性和增强功能。本章节将详细介绍HTML5的新元素和语义化特性,以及它如何通过多媒体和图形支持扩展了Web的视觉和交互体验。

weixin_33531560的博客 859

threads.js:简化Web Worker与Worker Threads的JavaScript库

threads.js:简化Web Worker与Worker Threads的JavaScript库 项目介绍 threads.js是一款强大且易于使用的多线程库,旨在简化Node.js、Web和Electron环境中的异步处理和并发任务管理。它通过提供对async函数及观察者模式的一流支持,允许开发者以函数调用的方式轻松创建和管理Web Workers和Worker Threads。这个库的亮点...

gitblog_00721的博客 1078

NFS共享速度慢?麒麟系统性能调优5个关键参数实测对比

本文针对银河麒麟服务器系统上NFS共享速度慢的问题,通过实测对比分析了五个关键调优参数。重点探讨了rsize/wsize传输块大小、TCP/UDP协议选择、sync/async模式权衡等,并结合麒麟系统特性提供了具体的优化建议与配置示例,旨在帮助用户有效提升国产化环境下的文件共享性能。

weixin_29254029的博客 335

三相SST固态变压器详细设计案例

本案例针对400kVA、30kHz三相固态变压器(SST)开展详细设计,核心采用输入串联输出并联(ISOP)拓扑架构(模块化多电平矩阵变换器M3C简化版),重点完成高频变压器的参数计算、绕组设计、损耗分析及液冷温升验证,同时覆盖系统级架构设计、半导体损耗估算及整机效率优化,全流程基于当前电力电子技术可行性展开。

qq_32103755的博客 3299

单或多级THS反向代理后request.getScheme获取不到https的解决办法-yjm

在实际应用中,经常会用到THS反向代理应用,其中就会出现一种情况,访问https页面Java 通过request.getScheme()获取不到https协议,或者response.sendRedirect重定向是http,而不是我们想要的https。

weixin_39938069的博客 1346

别光看教程了!手把手带你用STM32F103C8T6最小系统板点亮第一个LED(附完整电路图)

本文详细介绍了如何使用STM32F103C8T6最小系统板点亮第一个LED,从硬件连接到软件开发环境搭建,再到编写和下载程序,手把手教你完成STM32入门的第一步。适合初学者快速上手STM32开发,附完整电路图和代码示例。

weixin_28678831的博客 195

THS-配置PHP

•注意:chmod -R 755 /home/linuxAli/tongweb/TongWeb7044/THS/mng // 修改的是mng及其子文件夹的权限,并不能更改mng上级目录的权限,而如果其上级目录权限不是755,eg 644, 经验证,会出错!•chmod 755 $(find /home/linuxAli/tongweb/TongWeb7044/THS/mng -type d) 或者。•下载安装包:https://www.php.net/downloads.php。

weixin_39938069的博客 441

Delphi 13 Beta初体验:手把手教你安装RAD Studio Ganymede,并实测新条件运算符

本文详细介绍了Delphi 13 Beta(代号Ganymede)的安装步骤和新特性,重点解析了新增的条件运算符语法。通过实测对比,展示了64位IDE的性能提升和新语法在代码简洁性上的优势,为开发者提供了从安装到实战的完整指南。

weixin_30399821的博客 205

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

专用机THS配置HA过程以及过程中的问题

6.执行 rpmbuild –bb tongwebservice.spec 构建rpm包,执行完成以后,生成的rpm包位于 /rpmbuild/RPMS目录下。BUILDROOT 最终安装目录,保存 %install 阶段安装的文件,打包好后此目录相关内容 会自动删除。部分专用机vrrp协议是无法保存的 这种需要自己把vrrp协议写入 ha的启动脚本 重新打rpm包。SRPMS 源代码 RPM 包目录,生成/保存源码 RPM 包(SRPM)RPMS 标准 RPM 包目录,生成/保存二进制 RPM 包。

weixin_59691555的博客 608

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1212

单或多级THS反向代理后request.getScheme获取不到https的解决办法

第一个参数的作用是将请求重定向为指定的协议(http,https),其中scheme是请求的THS的协议,即server配置的是什么协议,则scheme是请求的THS的协议,即server配置的是什么协议,则scheme就是什么协议。默认是http协议,如果不进行设置,会发现代理的网站的所有静态文件,图片、css、js等url都是采用默认的http协议,导致https代理失败。通常的架构是内部的THS之间采用的是http进行通讯,一级代理配置https,二级及以上的THS则是配置http。

weixin_59691555的博客 1080

ros入门(八)---TF坐标转换

TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。

weixin_51157015的博客 3388

【网络与爬虫 44】Canvas指纹伪造技术:突破浏览器图形渲染检测的终极指南

Canvas和WebGL指纹是现代反爬虫系统中最难绕过的检测技术之一,它们通过分析浏览器图形渲染的细微差异来识别用户设备。本文将深入解析Canvas和WebGL指纹的工作原理,探讨其在反爬虫检测中的应用,并提供多种有效的伪造和绕过策略,帮助开发者理解并应对这些高级检测技术。

熵数实验室 1206

GKD_THS_List部署与扩展:如何搭建自己的订阅收录平台

想要搭建属于自己的GKD第三方订阅收录平台吗?GKD_THS_List项目提供了完整的解决方案,让你能够快速部署和扩展订阅管理功能。作为GKD第三方订阅收录的核心平台,它汇集了众多优秀的订阅规则,为Android自动化工具用户提供丰富的资源选择。 ## 📋 项目概述与核心功能 GKD_THS_List是一个专门收集和整理GKD第三方订阅链接的开源项目,它为订阅管理提供了标准化的解决方案。通过

gitblog_00812的博客 1080

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ths5负载访问应用慢

高访问量,通过分析access.log发现每天大有100多接近200万条的请求日志(下图是12),其中包含大量的js文件、图片文件等等。高访问ths5承载不了,导致某些长链接无法终止堵塞,最终导致整个ths5的最大进程数不够用,从而崩溃。提供THS6的rpm安装包,整个环境搭建大概需要1-2个小时,避开用户使用期,可在晚上进行,不影响现有环境的使用。用户高峰期,导致用户通过ths负载访问应用慢,后续报错。升级为更稳定并能处理大量请求访问,性能更优越的THS6。

weixin_59691555的博客 270

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

通过THS5访问应用后地址栏直接变为节点地址问题

经过测试,如果在应用中,例如index.jsp中使用location.href=url或者location.replace(url)跳转到url页面时,通过THS访问应用时,就会使得地址栏变为代理的节点地址。项目配置THS5.0,通过THS访问应用后访问地址变为节点地址。访问test应用时,index.jsp中使用js的location.href=url,跳转到login.jsp。解决三 可以在tongweb控制台修改如下图,代理服务器URL里填写THS的访问地址解决。下面进行了问题复现。

weixin_59691555的博客 338

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

THS负载session丢失

THS5.0.0.2负载服务器项目,用户OA项目项目现象四台服务器部署同一个oa系统,检查THS日志有接口请求返回408(post请求参数过大导致)就会导致请求跳服务器;检查发现session变了,请求也被THS分发到了其他服务器上。用户登录会周期性的登录掉线,配置文件设置IP绑定,

weixin_59691555的博客 188

THS负载与WPS编辑不同步

单机访问oa编辑文档功能编辑,修改都正常,通过负载访问,编辑修改在oa应用上会失败(在文件系统中实际文档已编辑保存成功,但是在oa应用中打开的还是模板文件),每个单机均正常.THS3.8负载服务器项目,用户OA项目项目用到了一wps插件编辑文档,现象四台服务器部署同一个oa系统,共享同一个文件项目,THS3.8做iphash绑定,可以正常处理该问题,但是故障跳转不行。更换THS5.0.2版本。

weixin_59691555的博客 246

多应用对应不同端口ip环境ths的配置

配置完成后保存退出,在/opt/Tongweb/THS/bin 下,执行 ./startHA.sh。配置完成后保存退出,在/opt/Tongweb/THS/bin 下,执行 ./start.sh。

weixin_59691555的博客 549

繁体字转换技术方案(THS)

本文档概述了系统简繁体转换方案,涵盖前端到后端的全面转换策略。主要内容包括:1)转换目标为全系统文本(静态/动态/交互数据)准确转换为台湾繁体,确保性能稳定;2)采用opencc-js(前端)和OpenCC4j(后端)实现转换,建立统一转换规则和缓存机制;3)制定详细测试计划(功能/性能/兼容性测试)及风险应对措施(错误词汇表、性能优化);4)实施步骤分环境配置、功能开发、多轮测试及客户验收阶段。重点保证转换准确性、系统性能及跨平台兼容性,特别针对金融专业术语建立专项处理机制。

技术引领业务创新 1572

ThingsBoard 快速上手指南:3步本地跑通 + UI源码导读

克隆一个上千个 Java 文件的 IoT 平台仓库,第一步不是写代码,而是知道从哪下手。这篇文章带你用最短路径把 ThingsBoard(开源 IoT 平台,覆盖设备管理、遥测数据采集、规则处理和实时仪表盘)在本地跑起来,再快速指认核心源码的主干路径,目标是让你一小时内从"跑不起来"走到"知道每个改动该去哪找"。 - 用 Docker 一键启动 ThingsBoard 后端,前端最短路径跑通 -

gitblog_00107的博客 414

cordova-plugin-ths-baidulocation 实现 Android 定位功能

cordova-plugin-ths-baidulocation 实现 Android 定位功能

Lyrelion的博客 2956

PHP安装-配置及问题排查

•注意:chmod -R 755 /home/linuxAli/tongweb/TongWeb7044/THS/mng // 修改的是mng及其子文件夹的权限,并不能更改mng上级目录的权限,而如果其上级目录权限不是755,eg 644, 经验证,会出错!这台机器,其它都可以访问,就访问 /var/www/html/dinfo.php 报:503 service temporarily unavailable.然后,里面有个链接页面无法访问,提示:./data/template 无法找到或无法访问;

weixin_59691555的博客 968
上一篇: Flex trace 配置
下一篇: javascript 继承实现方法
ProjectArchitect
博客等级 码龄19年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值