关于this指向

  前言

848d7961dd5eaacaa36674d2bd9f5f07.png

7de3c5f125358681109b3e59909c4d8d.png

 我是歌谣 最好的种树是十年前 其次是现在 今天继续给大家带来的是this的讲解

aa0a541444f48906dea49db9e7db2f7b.png

 环境配置

a8221581b99e8628ca611321d9844630.png

npm init -y

yarn add vite -D

修改page.json配置端口

4d81fc0b90c12bc8df564074375163b6.png

{
"name": "demo1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "vite --port 3002"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"vite": "^4.4.9"
}
}

 基本案例

880a4e8f2f70da419c97f4b06f779d3d.png

console.log(this==window)
var a=1;
var b=function(){
return 'function'
}
console.log(a)
console.log(b)

 运行结果

7fb4687000ee8a924ba555c69e5eecdb.png

0ebb29168fc269d1cba912ede8c895fa.png

类与函数

8064cfe0180283c0b8c7facc550f2872.png

class Test1{
constructor(){
}
say(){
}
static do(){
}
}
const test=new test1()
const Test=(function(){
function Test2(){
}
Test2.prototype.say=function(){
}
Test.do=function(){
}
window.Test=Test
})
const test2=new Test2()

类组件案例

52c445ffb47f7788f24571b3aa10b190.png

class Test{
constructor(){
this.test=function(){
console.log("none-static",this)
}
}
test(){
console.log("static"+this)
}
}
const test=new Test()
test.test()
const TestA=Object.create(null)
console.log(TestA)
const TestB={}
console.log(TestB)

运行结果

88f3984e794137eb8e4c4f1164cc24f1.png

cd2d218372c714812c9207186dfb1deb.png

 继承

546d96a12a485a8ca826529cdde4ee95.png

class Father{
constructor(){
this.age=18
}
swim(){
console.log("Go Swimming")
}
}
class Son extends Father{
constructor(){
super()
this.hobby="playing"
}
study(){
console.log(this)
this.swim()
}
}
const son=new Son()
son.study()

 运行结果

76a7e82cf1c3b6060546c869e3a3710c.png

03c6869fa016d077e78caf5dac5a287a.png

 call,apply,bind

36bfae97104030d7161212ff546da352.png

var obj={
a:1
}
var obj2={
a:100
}
var a=2;
function test(b,c){
console.log(this.a,b,c)
}
test()
test.call(obj)
test.apply(obj)
test.call(obj,3,4)
test.apply(obj,[3,4])
var test1=test.bind(obj,3,4)
test1();
var test2=test.bind(obj2,3,4)
test2();

运行结果

846fc96f428a80927b31a10ee7153501.png

2e8290ff6757072fb984cfd51dc3a9bc.png

严格模式

1ea4bab9f68f9b0a057201c2600c3fba.png

'use strict'
const test=()=>{
console.log(this)
}
function test1(){
console.log(this)
}
const test2=function(){
console.log(this)
}
test()
test1()
test2()

运行结果

587adb36e27ced53d0e8e488e4b83c39.png

53c68b918cf9575adee8ceace69ef8e2.png

 案例

b7bc1318317254be9e7cbefbc62b3cf4.png

var obj={
a:1
}
var a=2
const test=()=>{
console.log(this.a)
}
test()
test.call(obj)
test.apply(obj)
var test1=test.bind(obj);
test1()

 运行结果

b72911b26fc3f529947bb3d016671b35.png

1669b11dc8d4a7606cbaeccbed260ff7.png

 箭头函数和普通函数

b39ef3b84694637e58b7f677edb8f91d.png

var obj={}
var obj1={}
var obj2={}
obj.test = () => {
console.log(obj)
console.log(this)
}
obj.test()
obj1.test=function(){
var t=()=>{
console.log(this)
}
t()
}
obj1.test()
obj2.test=function(){
console.log("test",this)
var t1=function(){
console.log("t1",this)
var t2=()=>{
console.log("t2",this)
}
t2()
}
t1()
}
obj2.test()

 运行结果

6a79f405494495697afe6b45cb2c604c.png

3ccd22de1f719e4abd695835c228f8d6.png

 案例

d2d554528cdbe77a37340f9712357d6f.png

var obj={
a:1,
b:2,
c:{
d:4,
test3:function(){
console.log(this.d,"d is")
}
},
test:function(){
console.log(this.a,"a is")
},
test2:test2
}
function test2(){
console.log(this.b,"a is")
}
obj.test()
obj.test2()
obj.c.test3()

运行结果

cfcc8f5b7754b019e9a8cf516eee2d70.png

7da349c4cd03b26d9eaaf19c5518ba1c.png

addEventListener案例

10a994c307b481842efd79600e95d7a7.png

// var OBtn=document.getElementById("J_BUTTON")
// OBtn.onclick=function(){
// console.log(this)
// }
// OBtn.addEventListener("click",function(){
// console.log(this)
// },false)
; (function (doc) {
var OBtn = document.getElementById("J_BUTTON")
function Plus(a, b) {
this.a = a;
this.b = b
this.init()
}
Plus.prototype.init = function () {
this.bindEvent()
}
Plus.prototype.bindEvent = function () {
OBtn.addEventListener("click",this.handleBtnClick.bind(this),false)
}
Plus.prototype.handleBtnClick = function () {
console.log(this.a,this.b)
console.log(this)
}
window.Plus=Plus
})(document)
new Plus(3,4)

 运行结果

c791cbfc0756352cf94e5d52df9b56ae.png

da41455676784f0de154cb457365fa5e.png

 father和son

class Father{
constructor(){
this.eat=this.eat.bind(this)
}
get fruit(){
return 'apple'
}
eat(){
console.log('i an eat'+this.fruit)
}
}
class Son{
get fruit(){
return 'orange'
}
}
const father=new Father();
const son=new Son();
father.eat()
son.eat=father.eat
son.eat()

运行结果

39c8b5ee1a6b558b3670e136652a51e8.png

79b02275dd4e89d79b15a165b4d0fbd6.png

总结 

e7fb0f95b76a59e71be35a2b34e135b6.png

18653edf5543dbcb1b107bbc1e7b3453.png

  我是歌谣 最好的种树是十年前 其次是现在 微信公众号关注前端小歌谣一起学习前端知识

64fea1b0bc0e155487ecf66ffd2c1cfa.png

下方查看历史文章

8da3e1587480b33e549c2445de563378.png

关于回调

关于闭包(完)笔记

关于闭包(壹)

关于react-admin+postgrest小案例

关于react-redux案例

posted @   前端导师歌谣  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示