首页 > 其他分享 >前端歌谣-第六课-关于this指向

前端歌谣-第六课-关于this指向

时间:2023-09-10 21:00:52浏览次数:30  
标签:function console 歌谣 第六课 前端 var test obj log

前言

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

环境配置

npm init -y
yarn add vite -D

修改page.json配置端口

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

基本案例

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

运行结果

前端歌谣-第六课-关于this指向_环境配置

类与函数

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()

类组件案例

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)

运行结果

前端歌谣-第六课-关于this指向_环境配置_02

继承

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()

运行结果

前端歌谣-第六课-关于this指向_环境配置_03

call,apply,bind

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();

运行结果

前端歌谣-第六课-关于this指向_ci_04

严格模式

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

运行结果

前端歌谣-第六课-关于this指向_ci_05

案例

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()

运行结果

前端歌谣-第六课-关于this指向_Test_06

箭头函数和普通函数

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()

运行结果

前端歌谣-第六课-关于this指向_ci_07

案例

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()

运行结果

前端歌谣-第六课-关于this指向_ci_08

addEventListener案例

// 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)

运行结果

前端歌谣-第六课-关于this指向_环境配置_09

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()

运行结果

前端歌谣-第六课-关于this指向_Test_10

总结

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

标签:function,console,歌谣,第六课,前端,var,test,obj,log
From: https://blog.51cto.com/u_14476028/7428058

相关文章

  • 4. 前端设计模式之原型模式
    PrototypePattern原型模式:在多个对象间共享相同的属性  JavaScript原生支持原型链也是实现继承的基础,如以下代码虽然是使用的ES2016新的语法classc创建的类Dog,然后又使用new实例化对象dog1、dog2、dog3,底层依然操作的原型链:classDog{constructor(name){this.name......
  • 纯前端也可以访问文件系统!
    前言周末逛github的时候,发现我们只需要在github域名上加上1s他就能够打开一个vscode窗口来阅读代码,比起在github仓库中查看更加方便然后我就想网页端vscode能不能打开我本地的项目呢,带着这个疑惑我打开了网页版vscode,它居然真的可以打开我本地的项目代码!难道又出了新的API让......
  • web前端HTML中五种网页跳转的方法
    单自动跳转法对于表单大家都很熟悉,就是将表单中填写的内容,提交到action参数中指定的url地址中,目标url再对接收到的数据进行处理。利用这一点,我们可间接的实现网页跳转,只不过,我们并不需要提交任何表单内容。再结合javascript脚本,可以对表单进行自动提交。示例如下:cript>其中form1名......
  • 前端开发者必看:CCS选择器的使用技巧和最佳实践
    前端开发中,选择器是非常重要的一部分。CSS选择器是用于选取HTML或XML文档中特定元素的模式,通过这些模式可以控制页面的样式。在前端开发中,常用的CSS选择器有以下几种:标签选择器标签选择器是通过HTML标签名称来选取元素,例如:p{color:red;}上述代码将会把页面中所有的......
  • 如何让Android平台像网络摄像机一样实现GB28181前端设备接入?
     技术背景好多开发者在做国标对接的时候,首先想到的是IPC(网络摄像头),通过参数化配置,接入到国标平台,实现媒体数据的按需查看等操作。像执法记录仪等智能终端,跑在Android平台,对接GB28181平台的需求也非常大,网上相关demo也不少,但真正设计符合相关协议规范、功能完善、长时间稳定运......
  • Android前端音视频数据接入GB28181平台意义
    技术背景在我们研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android端在没有国标摄像头设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试。 Android端真的没有必要做个支持GB28181的接入模块? 如果说做一个设备端摄像头国......
  • django-前端时间组件
    1、插件的下载BootstrapDatepicker是一款基于Bootstrap框架的日期选择控件,可以方便地在Web应用中添加可交互的日期选择功能。BootstrapDatepicker拥有丰富的选项和API,支持多种日期格式,可以自定义样式并支持各种语言。BootstrapDatepicker依赖bootstrap:bootstrap.min.css......
  • 开课吧前端1期.阶段2:ES6详解-4 Promise generator-认识生成器函数 generator-yield
    10、PromisePromise--承诺异步:操作之间没啥关系,同时进行多个操作同步:同时只能做一件事优缺点异步:代码更复杂同步:代码简单 //比如我要请求4个数据,真正生产还要判断,没法看了,缩进//异步:特别麻烦ajax('/banners',function(banners)){ajax('/hotItem......
  • vue前端table列表右侧的滑动条怎样实现
    要在Vue前端table列表右侧添加滑动条,您可以使用CSSoverflow属性和::-webkit-scrollbar伪元素来实现。以下是示例代码:<template><divclass="table-container"><tableclass="table"><!--表头--><thead><tr>......
  • Android前端音视频数据接入GB28181平台意义
    技术背景在我们研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android端在没有国标摄像头设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试。Android端真的没有必要做个支持GB28181的接入模块?如果说做一个设备端摄像头国标设备接入......