zoukankan      html  css  js  c++  java
  • Jquery第四课 Javascript中this的使用方法

    thiskeyword的使用

    在JavaScript中使用thiskeyword表示调用方法的对象,这与大部分面向对象语言是一样的。可是因为callapplybind等函数的影响。我们能够改变this所代指的对象。

    • 使用call或者apply调用的函数中,this代指传入的第一个參数对象,假设传入null或者undefined。则表示全局对象(window)。
    • 通过对象调用函数(方法),函数中的this表示调用该函数的对象。

    • 单独调用的函数中this表示全局对象。
    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"
    
    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"
    

    JavaScript能够在执行中为对象动态加入函数,这样也会导致this代指的对象发生变化。

    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.name);
            },
            myName: "Rebecca"
        }
    };
    
    var hello  myNamespace.myObject.sayHello;
    hello();    //"Hi, my name is undefined"
    
    var obj = myNamespace.myObject;
    obj.sayHello(); //"Hi, my name is Rebecca"
    

    Tips

    callapply的差别是,apply接收两个參数:this和函数的參数数组;而call的第一个參数为this,可是后面是函数的參数列表。

    本文档由长沙戴维营教育整理。

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6848718.html
Copyright © 2011-2022 走看看