当前位置: 首页 > news >正文

网站关键词排名优化技巧工信部网站icp备案号

网站关键词排名优化技巧,工信部网站icp备案号,桂林北站时刻表,伊春北京网站建设前端:JavaScript中的this 1. this的指向2. 指定this的值3. 手写call方法4. 手写apply方法5. 手写bind方法 1. this的指向 在非严格模式下,总是指向一个对象;在严格模式下可以是任意值。 开启严格模式,如果是为整个脚本开启&#…

前端:JavaScript中的this

    • 1. this的指向
    • 2. 指定this的值
    • 3. 手写call方法
    • 4. 手写apply方法
    • 5. 手写bind方法

1. this的指向

在非严格模式下,总是指向一个对象;在严格模式下可以是任意值。
开启严格模式,如果是为整个脚本开启,直接在当前脚本第一行代码写上如下代码:

'use strict'

如果是为函数开启严格模式,则是在函数第一行写上上述代码:

function a(){'use strict'
}
  1. 全局执行环境中,指向全局对象即window(严格、非严格模式);
  2. 函数内部,取决于函数被调用的方式。如果直接调用this,严格模式下为undefined,非严格模式下为全局对象(window);如果采用对象方法调用的this, 则指向调用者(严格、非严格)

直接调用

function a(){console.log(this);}function b() {'use strict'console.log(this);}a() // windowb() // undefined

对象方法调用

const food = {name:'西瓜',dec(){console.log(this)}
}
const food2 = {name: '香蕉',dec() {'use strict'console.log(this)}
}
food.dec() // food这个对象
food2.dec() // food2这个对象

2. 指定this的值

  • 调用时指定,call、apply(数组传递参数)
  • 创建时指定,bind,箭头函数

call使用如下:

func.call(thisArg,参数1,参数2...)
function func(num1,num2){console.log(this);console.log(num1,num2);}const person = {name:'baidu'}func.call(person,1,2)

在这里插入图片描述

apply使用如下:

func.apply(thisArg,[参数1,参数2...])
function func(num1,num2){console.log(this);console.log(num1,num2);}const person = {name:'baidu'}func.apply(person,[2,3])

在这里插入图片描述

bind使用如下:

func.bind(thisArg,绑定参数1,绑定参数2...)
function func(num1,num2){console.log(this);console.log(num1,num2);}const person = {name:'baidu'}const bindFunc = func.bind(person,77)bindFunc(88)

在这里插入图片描述

箭头函数
使用普通函数,此时最里层的this指向window

const person = {name:'baidu',hh(){console.log(this);setTimeout(function(){console.log(this);},1000)}}person.hh()

在这里插入图片描述
使用箭头函数,最里层的this指向其外层的this值。

const person = {name:'baidu',hh(){console.log(this);setTimeout(()=>{console.log(this);},1000)}}person.hh()

在这里插入图片描述

3. 手写call方法

任何定义的函数都是属于Function类型,那么只需要在Function其原型上添加一个call方法,其他自定义的函数上均可以使用call方法,这里定义的call方法名为myCall。

Function.prototype.myCall = function(thisArg,...args){thisArg.f = this// this指向调用myCall的那个函数const res = thisArg.f(...args)// 传递进来的args参数为数组类型delete thisArg.freturn res
}

但是上述还存在一个问题,那就是如果thisArgs这个对象上也刚好存在f属性,上述操作会把原对象thisArgs的f属性去掉。因此可以考虑使用Symbol,Symbol无论调用多少次,其返回值均是唯一的。

function func(num1, num2) {console.log(this);console.log(num1, num2);}const person = {name: 'baidu'}Function.prototype.myCall = function(thisArg,...args){const key = Symbol('key');thisArg[key] = this// this指向调用myCall的那个函数const res = thisArg[key](...args)delete thisArg[key]return res}func.myCall(person,22,33)

运行结果:
在这里插入图片描述

4. 手写apply方法

和myCall类似,只是传递参数不同而已。

function func(num1, num2) {console.log(this);console.log(num1, num2);
}
const person = {name: 'baidu'
}
Function.prototype.myApply = function(thisArgs,args){const key = Symbol('key')thisArgs[key] = thisconst res = thisArgs[key](...args)delete thisArgs[key]return res
}
func.myApply(person,[44,66])

在这里插入图片描述

5. 手写bind方法

function func(num1, num2) {console.log(this);console.log(num1, num2);
}
const person = {name: 'baidu'
}
Function.prototype.myBind = function(thisArgs,...args){return (...newArgs)=>{return this.call(thisArgs,...args,...newArgs)}
}
const myBindFunc = func.myBind(person,1)
myBindFunc(2)

箭头函数中this指向func,即其调用者(外层this的指向)
在这里插入图片描述

http://www.yayakq.cn/news/521469/

相关文章:

  • 提升网站建设品质价位wordpress修改插件路径
  • 张北县网站建设百度如何创建网站
  • 和平网站建设优化seo重庆在线网站推广
  • 网站设计需要会什么市场营销专业
  • 网站备案号 有效期免费认证网站
  • 如何做网站301重定向永久免费域名注册
  • 建设银行对账网站设计海报的软件
  • 免费asp网站空间杭州广告公司网站建设
  • 冠辰网站建设全网营销型网站建站专家
  • 石家庄建设集团网站wordpress flickr相册
  • 用什么软件制作动画视频唐山网站关键词优化
  • 网站制作专业的公司哪家好中国空间站vr全景
  • 门户网站模板 免费常州新北区建设局网站
  • wordpress熊掌号展示seo必备工具
  • 网站自己维护招聘网站预算怎么做
  • 高端网站设计报价wordpress调用所有栏目
  • 个人网站如何做即时支付中文 wordpress 主题
  • 企业网站建设的注意事项邢台企业网站建设报价
  • 电信备案新增网站柳市网页设计
  • 深圳市罗湖建设局网站直播视频软件哪个好
  • 教育培训类网站设计北京推广
  • 上海校园兼职网站建设北京高端网站建设规划
  • 数据录入网站开发优帮云首页推荐
  • 企业官网网站模板做网站国内阿里云虚拟主机多少钱
  • 一个虚拟机怎么做两个网站WordPress指定IP访问
  • 银川网站开发公司wordpress新窗口打开所有外链
  • 昆山网站周村家具行业网站建设
  • 阿里云官方网站php 网站换空间
  • 专业专题网站建设广州网络推广建站
  • 达内网站开发学习培训wordpress读什么意思