Javascript 笔记与总结(1-4)this
js 中函数的 4 种调用方式:
① 作为普通函数来调用,this 的值指向 window,准确地说,this 为 null,被解释成为 window。在 ECMAScript5 标准中,如果 this 为 null,则解释成 undefined
<script> function t(){this.x = 'hello'; } t(); alert(window.x); </script>
弹出:hello
② a.作为对象的方法来调用,this 指向方法的调用者,即该对象
<script> var obj = {x:'hello',y:'world',t:function(){alert(this.x)}}; obj.t(); </script>
弹出:hello
b.
<script> var obj = {x:'hello',y:'world',t:function(){alert(this.x)}};var dog = {x:'wang'}; dog.t = obj.t; dog.t(); </script>
弹出:wang
作为方法调用时,this 指向其调用那一刻的调用者,即母体对象,不管被调用函数,声明时属于方法还是函数
c.
<script> var obj = {x:'hello',y:'world',t:function(){alert(this.x)}};var dog = {x:'wang'}; dog.t = obj.t; dog.t();show = function(){alert('show '+this.x); } dog.t = show; dog.t(); </script>
d.
<script> var obj = {x:'hello',y:'world',t:function(){alert(this.x)}};var dog = {x:'wang'}; dog.t = obj.t; dog.t();show = function(){alert('show '+this.x); } dog.t = show; dog.t(); </script>
弹出:show wang
③ 作为构造函数调用时
js 中没有类的概念,创建对象使用构造函数来完成,或者直接用 json 格式{} 来写对象
<script> function Dog(name,age){this.name = name;this.age = age;this.bark = function(){alert(this.name);} } var dog = new Dog('妞妞',2); dog.bark(); </script>
弹出:妞妞
new Dog 发生了一下几个步骤:
a. 系统创建空对象{},(空对象 construct 属性指向 Dog 函数)
b. 把函数的 this 指向该空对象
c. 执行该函数
d. 返回该对象
例:
<script> function Robit(){this.name = '瓦力';return 'wali'; } var robit = new Robit(); console.log(robit); </script>
这段代码将输出?
答案:
Robit {name: "瓦力"}
输出的是 Robit 对象,因为函数作为构造函数运行时,return 的值是忽略的,依然返回对象(return 无意义)。
④ 函数通过 call,apply 调用
语法格式:函数.call(对象,参数1,参数2...参数n);
<script> function t(num){alert('我的年龄是 '+this.age);alert('虽然我看起来像 '+(this.age+num)); } var human = {name:'迭戈.科斯塔',age:27}; human.t = t; human.t(10); </script>
弹出:我的年龄是 27
弹出:虽然我看起来像 28
接下来,不把 t 赋为 human 的属性,也能把 this 指向 human
<script> function t(num){alert('我的年龄是 '+this.age);alert('虽然我看起来像 '+(this.age+num)); }var giroud = {name:'Giroud',age:28}; t.call(giroud,-5); </script>
弹出:我的年龄是 28
弹出:虽然我看起来像 23
【分析】:
fn.call(对象,参数1,参数2...参数n);
运行如下:
a. fn 函数中的 this 指向对象 obj
b. 运行 fn(参数1,参数2...参数n)
转载于:https://www.cnblogs.com/dee0912/p/4430658.html
Javascript 笔记与总结(1-4)this相关推荐
- javascript笔记:深入分析javascript里对象的创建(上)续篇
今天回来一看我的博客居然有这么多人推荐真是开心极了,看来大家对我的研究有了认可,写博客的动力越来越大了,而且我发现写javascript在博客园里比较受欢迎,写java的受众似乎少多了,可能博客园里j ...
- JavaScript 笔记Day1
<JavaScript 笔记> JavaScript 是属于网络的脚本语言! JavaScript 是世界上最流行的编程语言.这门语言可用于 HTML 和 web,更可广泛用于服务器.PC ...
- JavaScript笔记整理
JavaScript笔记整理 这段时间没有之前花在学习上的时间多了 目前进度还停留在JavaScript和D3.js(这个目前只找到了教程) 主要原因是因为决定自己找单位实习,到了今天26号才有了眉目 ...
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...
- Web前端JavaScript笔记(4)节点
如何获取元素节点的属性: 在Web前端JavaScript笔记(3)对象中,介绍了访问行间属性的方法,除此之外,系统还提供了三个方法访问元素的属性: 1. setAttribute: 2. getAt ...
- 【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)
文章目录 一. 引用数据类型中的数组 1.1 概述 1.2 初始化 1.2.1 字面量 1.2.2 构造函数模式 1.3 访问 1.4 length属性 1.5 数组遍历 1.6 类数组对象 1.6. ...
- 狂神Javascript笔记
学习狂神JavaScript所记录的笔记 Javascript笔记 一.前端核心分析 1.1.概述 Soc原则:关注点分离原则 Vue 的核心库只关注视图层,方便与第三方库或既有项目整合. HTML ...
- JavaScript笔记(狂神说)
JavaScript笔记(狂神说) 本文章根据b站狂神说javascript视频教程整理 视频链接:https://www.bilibili.com/video/BV1JJ41177di?from=s ...
- 尚硅谷李立超JavaScript笔记
李立超老师JavaScript笔记 目录 1.JS简介 2.JS的HelloWorld 3.JS代码编写的位置 4.JS的基本语法 5.字面量与变量 6.标识符 7.数据类型 8.强制类型转换 1. ...
- JavaScript笔记(一)
JavaScript笔记(一) 1 JavaScript简介 JavaScript,就是我们通常所说的JS,是一种嵌入到HTML页面中的脚本语言,由浏览器一边解释一边执行. 我们在"HTML ...
最新文章
- C将十六进制数字字符串转成数字
- 机器学习(MACHINE LEARNING)MATLAB蚁群算法解决TSP问题
- linux 控制台输入命令无效_在控制台输入什么命令都提示commandnotfound原因是什么?suselinux...
- android 文字fly动画,超好看的下拉刷新动画Android代码实现
- python快速入门步骤_Python快速入门
- ICS Pwn2Own 2022迈阿密黑客大赛的目标和奖金公布
- floating输入 高阻输入_STM32 GPIO八种输入输出模式
- 内存调试工具Electric Fence
- 算法——Java实现栈
- mysql海量数据查询/处理
- unity shader projector使用
- android system.img userdata.img文件解包打包及设置
- [IOI2019] 景点划分
- 卡尔曼滤波理论小释之卡尔曼增益
- Day2快捷键+简单Dos命令
- 代码优化- 前端优化
- php1000以内菲波,菲波纳奇交易:如何掌握时间与价格优势 Fibonacci Trading
- 饥荒专属服务器开完怎么运行,饥荒联机版专服简易启动教程
- 区块链:诞生于草根的时尚
- 阿里云网络解决方案架构师任江波:全球一张网,支撑游戏业务高效互联
热门文章
- qpython3l_介绍一下手机里能敲Python代码的软件,QPython3L和Pydroid3,顺便用有道翻译一下后者...
- macos big sur升级失败_【王牌出击】升级欲望更为强烈 斯旺西有望反客为主
- mysql blob 导出_mysql blob导出文本解密 | 学步园
- vue项目中的遇错:Invalid Host header
- 评估微型计算机的主要指标,微型计算机的工作过程和主要性能指标.doc
- 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)
- java 分句_JAVA按文字,标点符号和引号分割句子
- 数据库增删改查性能对比
- 合肥中学计算机老师招聘,2019年合肥北城中学教师招聘公告
- 使用X Manager远程CentOS 7服务器(XDMCP)