zoukankan      html  css  js  c++  java
  • 关于 this指向问题的详解

    在这篇文章中主要跟大家简单总结一下js中的this指向问题

    JS中, this的值取决于调用的模式, 下面就给大家详细的列举一下

    1.所有在全局环境下声明的变量或方法都属于window对象

    //1.function声明函数
        var name="李四"
        function fn(){
        console.log(this.name) 
        }
    //    fn()//window 李四
    //2.function 声明函数赋给变量
        var fun = function(name){
        console.log(name)
       }
       fun('蜘蛛')//window 蜘蛛
    // 3.自执行函数
       (function(name){
    // console.log(name)
       }('赵四'))//window 赵四

    2.方法调用中this的指向

    //1.对象方法调用
    var obj = {
    method: function(fn) { 
    console.log(fn)
    }
    };
    obj.method(1); 
    //2.事件绑定
    var btn = document.querySelector('button')
    btn.addEventListener('click',function(){
    console.log(this)//btn
    })

    3.在构造函数中使用(先看谁在调用再判断this指向)

    function show(name) {
    this.val = name;
    };
    show.prototype.getVal = function() {
    console.log(this.val);
    };
    var func = new show(1);
    func.getVal(); 
    console.log(func.val)

    4.可以改变this指向的属 call apply bind

    //1.call()
    function sayName(name){
    console.log(this.name)
    }
    var name = '张三'
    var person1 = {
    name:'李四'
    }
    var person2 = {
    name:'王五'
    }
    sayName()//张三
    sayName.call(person1)//李四
    sayName.call(person2)//王五
    //2.apply()
    sayName.apply(person1,[person1])
    sayName.apply(person2,[person2])
    //3.bind()方法第一个参数是我们希望函数中this指向的对象,后面是我们希望给函数的参数绑定的值
    var person = {
    name:'刘罗锅',
    age:98,
    gender:''
    }
    function myName(age,gender){
    console.log(this.name,age,gender)
    }
    var newName = myName.bind(person,78,'')
    newName()



  • 相关阅读:
    PSR-2 编码风格规范
    Git中删除冗余的分支
    linux下ssh连接缓慢详解
    pytest框架之fixture详细使用
    如何利用jenkins插件查看allure报告-----完整篇
    CentOS上安装配置Python3.7
    [Python]requests使用代理
    Selenium
    Python性能分析工具-cProfile
    subprocessf运行window程序
  • 原文地址:https://www.cnblogs.com/sw91092/p/7532520.html
Copyright © 2011-2022 走看看