整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript this关键字:为何如此关键?

JavaScript this关键字:为何如此关键?如何正确绑定?

JavaScript中,this关键字的指向是动态变化的,它依赖于函数的调用方式。理解this的指向是JavaScript编程中的一项重要技能,因为它直接影响到函数内部访问到的对象。下面详细解释几种常见的this指向情况:

1. 全局环境中的this

在全局作用域(浏览器中的全局对象是window,Node.js中的全局对象是global)中,this指向全局对象。

console.log(this===window); // 在浏览器中输出 true  
console.log(this.document !==undefined); // 验证this指向全局对象

2. 函数调用中的this

在普通函数调用时(非严格模式下),this指向全局对象(浏览器中是window,Node.js中是global)。在严格模式('use strict';)下,this是undefined。

function test() {  
    console.log(this===window); // 非严格模式下为 true  
}  
  
test();  
  
function strictTest() {  
    'use strict';  
    console.log(this===undefined); // 严格模式下为 true  
}  
  
strictTest();

3. 方法调用中的this

当一个函数被保存为某个对象的属性时,我们称之为方法。在方法调用中,this指向调用该方法的对象。

const obj={  
    method: function() {  
        console.log(this===obj); // 输出 true  
    }  
};  
  
obj.method();

4. 构造函数中的this

在构造函数中,this指向新创建的对象实例。

function Car(make, model) {  
    this.make=make;  
    this.model=model;  
}  
  
const myCar=new Car('Ford', 'Mustang');  
console.log(myCar.make); // 输出 Ford

5. 箭头函数中的this

箭头函数不绑定自己的this,它会捕获其所在上下文的this值,作为自己的this值。

const obj={  
    method: function() {  
        return ()=> {  
            console.log(this===obj); // 输出 true  
        };  
    }  
};  
  
const func=obj.method();  
func();

6. 显式设置this

使用call()、apply()和bind()方法可以显式设置函数执行时this的指向。

  • call(thisArg, arg1, arg2, ...)
  • apply(thisArg, [argsArray])
  • bind(thisArg, arg1, arg2, ...)

这些方法都允许你调用一个函数,并显式地设置函数体内this的值,call和apply会立即执行函数,而bind会返回一个新的函数,这个新函数在被调用时,this会被设置为bind的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

使用call()

call()方法调用一个函数,其具有一个指定的this值和分别提供的参数(参数的列表)。

function greet(greeting, punctuation) {  
    console.log(this.name + ' says, ' + greeting + punctuation);  
}  
  
const person={  
    name: 'Alice'  
};  
  
// 使用call()显式设置this指向person对象  
greet.call(person, 'Hello', '!');  
// 输出: Alice says, Hello!

使用apply()

apply()方法调用一个函数,其具有一个指定的this值,以及作为一个数组(或类数组对象)提供的参数。

function greet(greeting, punctuation) {  
    console.log(this.name + ' says, ' + greeting + punctuation);  
}  
  
const person={  
    name: 'Bob'  
};  
  
// 使用apply()显式设置this指向person对象,参数作为数组传递  
greet.apply(person, ['Hi', '.']);  
// 输出: Bob says, Hi.

使用bind()

bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被指定为bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

function greet(greeting, punctuation) {  
    console.log(this.name + ' says, ' + greeting + punctuation);  
}  
  
const person={  
    name: 'Charlie'  
};  
  
// 使用bind()创建一个新函数,其this指向person对象  
const greetCharlie=greet.bind(person, 'Hey', '!');  
  
// 调用新函数  
greetCharlie();  
// 输出: Charlie says, Hey!  
  
// 注意:bind()不会立即执行函数,而是返回一个新函数

理解这些this的指向规则,对于编写清晰、可维护的JavaScript代码至关重要。

HTML中,列表、引用和代码是常用的结构,它们有助于组织内容,突出显示特定信息,并提高网页的可读性和功能性。本文将详细介绍这些元素的使用方法和实例。

列表(Lists)

列表是组织项目或信息点的一种方式。在HTML中,有两种主要类型的列表:有序列表和无序列表。

有序列表(Ordered Lists)

有序列表使用<ol>标签创建,列表中的每个项目使用<li>(列表项)标签标记。有序列表通常用于表示有特定顺序的步骤或排名。

使用实例:

<ol>
  <li>开启电脑。</li>
  <li>打开浏览器。</li>
  <li>访问网站。</li>
</ol>

在这个例子中,步骤按照顺序排列,用户应该按照列表的顺序执行。

无序列表(Unordered Lists)

无序列表使用<ul>标签创建,同样使用<li>标签来定义列表项。无序列表适用于没有特定顺序要求的项目列表。

使用实例:

<ul>
  <li>苹果</li>
  <li>香蕉</li>
  <li>橘子</li>
</ul>

这个例子中的水果列表没有特定的顺序要求。

引用(Blockquotes)

引用用于表示页面上的文本是从其他来源引用的。在HTML中,<blockquote>标签用于定义长引用,而<q>标签用于定义短引用。

长引用

长引用通常用于引用段落长度的文本。它通常会缩进,并且可以包含引用的来源信息。

使用实例:

<blockquote cite="http://example.com/quote-source">
  <p>这是一个长引用的实例,通常用于引用段落文本。引用的文本应该保持原作的语境和意义。</p>
  <footer>— 引用自 <cite>《引用来源的书名》</cite></footer>
</blockquote>

短引用

短引用用于行内文本,它通常不会改变文本的布局。

使用实例:

<p>正如某人所说:<q>知识就是力量。</q></p>

代码(Code)

在网页中展示代码片段时,HTML提供了<code>标签用于标记代码。对于多行代码或需要保持格式的代码,可以使用<pre>标签。

单行代码

单行代码用于展示简短的代码或命令。

使用实例:

<p>要添加一个段落,你可以使用<code><p>...</p></code>标签。</p>

多行代码

多行代码或需要保持原始格式的代码使用<pre>和<code>标签组合使用。

使用实例:

<pre><code>function greet(name) {
  return 'Hello, ' + name + '!';
}</code></pre>

在这个例子中,<pre>标签保持了代码的格式,而<code>标签表示文本是代码。

结论

HTML中的列表、引用和代码是构建清晰、有组织的网页内容的重要工具。列表帮助用户理解信息的结构,引用增加了内容的可信度,而代码的正确展示对于教学和技术文章来说至关重要。通过熟练运用这些元素,你可以提高网页的专业性,使内容对用户更加友好和易于理解。

.标签语义化

提到标签,很多刚入门前端开发的人,肯定都会很纳闷,这么多HTML标签我如何记住呢?我又应该根据什么依据去正确使用它呢?其实这样的问题,我刚开始和大家一样苦闷,但是在我学习Web页面开发的过程中,然后不断的积累,不断的总结,发现要想记住HTML标签以及怎样更好的去使用这些标签,需要做到以下三点:

第一点:不要死记硬背,没意义,只需要记住常用的哪几个足矣。

第二点:根据内容选择使用HTML标签,什么意思呢?见下文分解。

第三点:遵循W3C的规范。

首先,第一点咱们就不用说,不让死记硬背,就是要多写页面,多敲代码,久而久之孰能生巧,巧能生花,慢慢的你就能记住这些标签了,而且在开发页面的过程中,你们会发现,咱们最常用的也就是那么几个而已。

其次,第二点根据内容选择使用HTML标签,这一点非常关键,因为你掌握了这一点,你能很好地去使用HTML标签,并且能让页面变得很优质,这也会提高你网页被搜索引擎收录。

最后,也就是第三点,这一点自然不用怀疑,如果要想让页面更好的在不同的浏览器中呈现出一致的效果,那么必须遵循W3C的规范。

说了这么多,只是一些学习需要注意的问题,下面才是真正解开怎样去使用和记住标签这个谜团的方法。

我们在使用标签的过程中,大家会发现类似的标签,比如标题标签(h1-h6)、p(段落标签)、a(超链接标签)以及图片标签(img)等,通过这些标签的名称,咱们是不是不难理解吧,很直观的就知道这些标签该怎么,用于何处。而这些名称的含义就是我们所说的标签语义化。随着智能手机的出来,移动Web都是通过H5去开发页面,而H5中的HTML标签就比之前版本的HTML标签更加具有语义化。

那么什么是标签语义化呢?所谓的标签语义化,指的就是标签所代表的含义。咱们可以通过标签的含义,正确地去使用它。

标签语义化的作用:

  • 通过使用语义化标签,更能精准地将其把内容呈现出来。
  • 通过使用语义化标签,让页面结构更加的清晰,方便代码的阅读和维护。
  • 能让浏览器或网络爬虫更好地解析,从而更好地分析和抓取网页中的内容。
  • 使用语义化标签还能让搜索引擎得到更好的优化。

如下图所示,通过使用语义化标签和没使用任何标签,就能直观感受到语义化标签的好处。

普通的文本和使用语义化标签后的效果对比图

那么如何去判断一个页面中,语义化是否良好呢?很简单,直接扒掉CSS这层漂亮的衣服,当我们把CSS去掉后,如果页面中的结构依然组织有序,并且有良好的可读性,那么它就是非常良好的。

如何去使用这些标签呢?首先根据内容确定语义化的标签,其次再根据呈现需求,使用CSS样式。因此HTML标签并非通过死记硬背,而是通过在使用的过程中,利用HTML标签的语义化去记忆。如下图所示,通过使用语义化标签,瞬间就能把普通的文本,以更清晰的结构呈现出来。

使用语义化的普通文本,变得更为结构清晰

2.常用标签分类汇总

通常我们常见的标签有标题标签、段落标签、水平线标签、换行标签以及div和span标签,这些标签又被统称为排版标签。

在开发中,排版标签主要是和CSS搭配使用,主要是用于显示网页的整体结构,也是网页布局中常用的标签。下面我一一了解一下。

排版标签:

【1】标题标签(h1-h6)

  • 缩写来源:标题标签的英文单词是head,因此它使用它的缩写h来表示。
  • 语义:标题标签主要是用于突显标题内容,它是h1-h6(分为1级标题、2级标题、3级标题......6级标题),级别依次递减。级别越小,标题就会越小。
  • 语法格式如下:


标题标签的使用

呈现的效果如下:

呈现的效果


一句话总结:使用了标题标签的文字会加粗,会根据级别显示文字的大小,并且一行只能放一个标题。

【2】段落标签(p)

  • 缩写来源:p标签的英文单词是paragraph,表示段落的意思。
  • 语义:p标签可以把html文档分割为若干段落。在网页中要想把文字以段落的形式呈现,并且有条不紊的,那么段落就是必备的标签。
  • 语法格式如下:

p标签语法格式


【3】水平线标签(hr)

  • 缩写来源:hr的英文单词是horizontal,表示横线的意思。
  • 语义:它表示分隔线,用于将文字内容分隔开,让文档结构看起来更加清晰,层次分明。当然在网页中除了使用分隔线(hr)标签来实现,还可以通过图片插入以及CSS样式来实现,只不过使用hr标签是最简单的方式。提示:CSS样式是页面中的重点,此处主要是介绍HTML,因此暂不做详细说明。
  • 语法格式:<hr />。
  • 标签特点:它是一个单标签,hr标签默认是以水平线的样式进行显示。

【4】换行标签(br)

  • 缩写来源:br的英文单词是break,打断、换行的意思。
  • 语义:表示换行的意思。在html中,一个段落的文字会从左到右依次排列显示,直到浏览器窗口的最右端,才会自动换行。如果我们在实际开发中碰到需要将文本内容强制换行显示的,此时就可以使用换行标签实现。
  • 语法格式:<br />。
  • 标签特点:它也是一个单标签。
  • 示例:将以下内容通过br标签强制换行

文本

呈现效果:

使用br标签后的效果

【5】div和span标签

  • 缩写来源:div的英文是division,表示分割、分区的意思。span没有缩写,表示跨度、跨距和范围的意思。
  • 语义:div和span标签,没有任何语言,主要是用于网页布局使用。
  • 语法格式:<div>这是一个div盒子</div> <span>这是一个span盒子</span>
  • div和span的区别:div标签,主要是用于布局,在没有使用其它干预的情况下,一行只能放一个div。而span标签,也是用来布局,在没有任何其它的干预的情况下,一行上可以放很多span标签。此处的效果,大家可以根据语法,自行在实现查看一下对比效果。

最后给大家来一个完美的总结:

排版标签的汇总

难道这就完了吗?咱们的标签就只有这些常用的吗?那当然不是,咱们接下来再看我们的文本格式化标签。

文本格式化标签

文本格式化标签的作用:通常文本格式化标签主要用于网页中文字样式的设置,比如字体加粗、斜体或下划线等效果,当然后期也会通过CSS样式来实现,会更加完美。

常见的文本格式化标签如下:

文本格式化标签

它们分别的区别:

  • b和strong:b标签只是加粗,strong除了加粗,还具有强调的意思,更具语义化。
  • i和em:i只是让文本显示斜体的效果,而em在斜体的效果上加强了语义。
  • s和del:s只是让文本显示删除线,而得了不仅显示删除线,还加强了语义。
  • u和ins:u只是添加了下划线,而ins不仅显示了下划线,还加强了语义。

我么网页中除了排版标签、文本格式化标签,当然还少不了图片标签(img),通过图片的展示,会让整个页面更加的生动形象。那么下面再来看一下这个标签吧。

图片标签(img)

  • 缩写来源:img的英文单词是image,表示图像、影像的意思。
  • 语义:用于显示图片内容。
  • 语法格式:<img src='图像url' />,在这个的语法中,我们发现img标签使用了src属性,这个属性主要是用于指定图像的文件路径,也是img的必须属性。
  • img标签常见属性如下所示:

img标签属性

  • 标签特点:img标签主要是用于在网页中插入图像,它是一个单标签。
  • 知识点扩展:通过img标签,我们会发现,html标签除了自身外,它们还具有一些属性,这些属性,我们称为标签属性,通过标签属性可以设置标签的一些外在特性。标签属性的基本语法格式:<标签名 属性1="值1" 属性2="值2" ...>内容 </标签名>。

标签属性的特点:

  • 一个标签可以拥有多个属性,必须写在开始标签中,位于标签名后面。
  • 属性之间不分先后顺序,标签名与属性、属性与属性之间均以空格分开。
  • 任何标签的属性都有默认值,省略该属性则使用默认值。
  • 标签的属性采用的是键值对的格式key="value"的形式。

图片标签属性使用

链接标签

  • 缩写来源:a标签的英文单词是anchor,表示锚、铁锚的意思。
  • 语义:表示超文本链接。
  • 语法格式:<a href="跳转目标" target="目标窗口的弹出方式">文本或图像</a>。
  • 常见的属性:

a标签的常见属性

提示:

  • 比如添加作为外部链接,需要添加外部地址。
  • 内部链接,就是页面直接内部相互链接,因此只需要使用名称即可,比如

内部链接地址

  • 如果没有确定链接目标,通常使用"#"表示暂时空链接。
  • 除了可以创建文本链接,还可以给网页中的元素,如图像、表格、音频、视频都可以添加超链接。

注释标签

  • 注释标签:用于在HTML文档中添加一些便于阅读和理解,但又不需要显示在页面中的文字说明,此时就需要使用注释标签。它是HTML中的一种特殊标签,它不会在浏览器中显示,但是会在源代码中查看到。
  • 语法格式:

注释标签


  • 提示:注释通常是给咱们开发者看的,程序是不会执行这个代码的。

好了,各位小伙伴,今天我就给大家分享到这儿了,希望我给大家总结的内容,能帮到正在浏览我这篇内容的前端开发者,也希望你们有所收获。如果喜欢的,可以点击关注,会继续给大家分享更多的内容。