zoukankan      html  css  js  c++  java
  • JavaScript this关键字

        在JavaScript中,在大多数面向对象编程语言中,this是一个特殊的关键字,它在方法中被使用于转指为方法上被调用的对象。this的值可以由以下一系列简单的步骤来确定。
    • 如果方法是通过使用Function.call()或Function.apply()被调用的,那么可以设置第一个参数传递给.call()或.apply()。如果第一个参数传递的是null或undefined,那么this将指向全局对象(浏览器的window对象)。
    • 如果方法是通过创建使用Function.bind()被调用的,那么this是在方法被创建的时候作为第一个参数被传递给.bind()的。
    • 如果方法被调用作为一个方法对象,那么this将指向这个对象。
    • 其他情况下,方法被调用作为一个独立的方法没有附加任何对象。而this则指向全局对象。
    // 使用Function.call()调用方法
     
    var myObject = {
    sayHello: function() {
    console.log( "Hi! My name is " + this.myName );
    },
    myName: "Rebecca"
    };
     
    var secondObject = {
    myName: "Colin"
    };
     
    myObject.sayHello(); // "Hi! My name is Rebecca"
    myObject.sayHello.call( secondObject ); // "Hi! My name is Colin"
     
    // 使用Function.bind()调用方法
     
    var myName = "the global object";
    var sayHello = function() {
    console.log( "Hi! My name is " + this.myName );
    };
    var myObject = {
    myName: "Rebecca"
    };
    var myObjectHello = sayHello.bind( myObject );
     
    sayHello(); // "Hi! My name is the global object"
    myObjectHello(); // "Hi! My name is Rebecca"
     
    // 方法连接到运行中的对象上
     
    var myName = "the global object";
    var sayHello = function() {
    console.log( "Hi! My name is " + this.myName );
    };
    var myObject = {
    myName: "Rebecca"
    };
    var secondObject = {
    myName: "Colin"
    };
     
    myObject.sayHello = sayHello;
    secondObject.sayHello = sayHello;
     
    sayHello(); // "Hi! My name is the global object"
    myObject.sayHello(); // "Hi! My name is Rebecca"
    secondObject.sayHello(); // "Hi! My name is Colin"
        当调用深藏在一个命名空间里的方法时,常常想将这个方法的引用存储在一个变量里以减少输入的代码量。重要的是,不能对实例方法进行如此的处理。因为这会导致方法中的this的值发生变化,从而导致不正确的代码操作。
     
    var myNamespace = {
    myObject: {
    sayHello: function() {
    console.log( "Hi! My name is " + this.myName );
    },
    myName: "Rebecca"
    }
    };
     
    var hello = myNamespace.myObject.sayHello;
     
    hello(); // "Hi! My name is undefined"
        然而,你可以如下这样安全的调用方法。
    var myNamespace = {
    myObject: {
    sayHello: function() {
    console.log( "Hi! My name is " + this.myName );
    },
    myName: "Rebecca"
    }
    };
     
    var obj = myNamespace.myObject;
     
    obj.sayHello(); // "Hi! My name is Rebecca"
  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3267133.html
Copyright © 2011-2022 走看看