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"
  • 相关阅读:
    知识:CSS 词汇表(中英对照)_CSS Vocabulary
    js基础学习笔记(三)
    js基础学习笔记(二)
    js基础学习笔记(一)
    自己写的一个分页控件类(WinForm)
    JS判断浏览器是否支持某一个CSS3属性
    JavaScript用JQuery呼叫Server端方法
    ASP.NET MVC中的Json Binding和Validate
    ASP.NET Web Forms的改进
    8 种提升ASP.NET Web API性能的方法
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3267133.html
Copyright © 2011-2022 走看看