js学习难点

摘要:
但在JavaScript中this不是固定不变的,它会随着执行环境的改变而改变。在函数中,在严格模式下,this是未定义的。在事件中,this表示接收事件的元素。类似call()和apply()方法可以将this引用到任何对象。
JS学习难点:

this关键字

面向对象语言中 this 表示当前对象的一个引用。

但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

在方法中,this 表示该方法所属的对象。
如果单独使用,this 表示全局对象。
在函数中,this 表示全局对象。
在函数中,在严格模式下,this 是未定义的(undefined)。
在事件中,this 表示接收事件的元素。
类似 call() 和 apply() 方法可以将 this 引用到任何对象。
详细:https://www.runoob.com/js/js-this.html

在js中,this指向执行函数的对象

在HTML中默认的全局对象是HTML页面本身,所以函数属于HTML页面

在浏览器中的页面对象是浏览器窗口(window对象)。

  •   函数没有被对象调用(全局对象):
function myFunction() {
    return this;
}
myFunction();                // 返回 window 对象
  •   函数作为方法被调用:
var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // 返回 "John Doe"

this指向myObject对象

  • 作为函数方法调用函数:

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。

call()apply()是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // 返回 20
function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // 返回 20

两个方法都使用了对象本身作为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为this的值, 即使该参数不是一个对象。

在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。

js学习难点第1张

js学习难点第2张

js学习难点第3张

js学习难点第4张

var,let作用域

异步

promise

免责声明:文章转载自《js学习难点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Springboot项目发送邮件功能修改配置文件application.properties下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js解析Json字符串的方法

要把一个xml字符串转(“1,2,3,4,5,6,7,8,1,2”)换成数组的形式,每个值都应该是number类型的,想当然的就用了split方法,结果。。。问题来了,服务器要求数组的值是数字,而split是字符方法,所产生的数组也是字符串,麻烦来了。。这么大的数据量总不能一个一个的for循环parseInt吧,想想就头痛! 天无绝人之路,原来js这...

EasyUI的后台界面

EasyUI的后台界面搭建及极致重构 〇、前言 要了解一个东西长什么样,至少得让我们能看到,才能提出针对性的见解。所以,为了言之有物,而不是凭空漫谈,我们先从UI说起,后台管理页面的UI我们将使用应用比较普遍的easyui框架。 以前在用easyui的时候,每个页面都得从0做起,或者不厌其烦地由以前的页面通过“复制-粘贴”的方式来修改,久页久之,就会造成页...

用JS添加和删除class类名

下面介绍一下如何给一个节点添加和删除class名 添加:节点.classList.add("类名"); 删除:节点.classList.remove("类名"); 以tab切换为例: 在写tab切换的时候,通常我们会给选中的tab设置不同的样式,常用的方法是给被选中的tab新增一个class名,然后改这个class名的样式。 比如 起一个class名叫“a...

【原创】【js】screenLeft screenTop screenX screenY属性的有效性和兼容性研究

chrome浏览器(51.0.2704.106 m) 整个浏览器相对于主显示器屏幕的位置 虽然还原状态时有边缘,但是最大化时两个值都为0 IE浏览器(IE11): 浏览器文档区域相对于主显示器屏幕的位置 最大化时left值是0,top值是55 还原状态时left和top始终为正值,因为左右两侧有边缘 Opera浏览器(38.0.2220.41): 整...

在chrome中的source找不到自己写的js时处理方法

今天准备调试下js,突然发现在谷歌的中source中找不到我要调试的js,后来查资料和听同事说谷歌会把js压缩,于是找到以下方法来调试js 1. debugger神器 横扫各个浏览器。脚本运行到debugger语句位置,即跳入调试页面(好像只有chrome可以不做任何配置的,在动态js脚本里做到)。 2. //@ sourceURL=dynamicScri...

原生js操作dom的总结

一.学习DOM之前需要知道的 1.什么是window?  window:是一个全局对象, 代表浏览器中一个打开的窗口, 每个窗口都是一个window对象 2.什么是document?         document是window的一个属性, 这个属性是一个对象         document: 代表当前窗口中的整个网页,         docum...