gpt4 book ai didi

javascript - 为什么函数 getVehicleName 打印全局变量 vehicleName 而不是 Vehicle 对象内的变量 vehicleName?

转载 作者:行者123 更新时间:2023-11-29 15:58:50 26 4
gpt4 key购买 nike

我在全局范围内以及 Vehicle 对象内声明了一个 vehicleName 变量,在全局范围内声明了函数 printVehicleName,在 Vehicle 对象内声明了 getVehicleName。当我调用这两个函数时,它们都打印在全局范围内声明的 vehicleName。为什么会这样?

//declaring a global variable
let vehicleName = "Dodge";

//declaring a method to print vehicleName
function printVehicleName(){
console.log(vehicleName);
}

//declaring a object using object literal notation
let Vehicle = {
vehicleName : "Ferrari",
getVehicleName : printVehicleName
};

//executing printVehicleName function
printVehicleName();

//executing getVehicleName function
Vehicle.getVehicleName();

我希望 getVehicleName 函数打印“Ferrari”,但是当我调用这两个函数时,它们都打印了在全局范围“dodge”上声明的 vehicleName。任何人都可以解释其中的原因以及打印“Ferrai”的方法吗?

最佳答案

以下是您获得闪避的原因。

  1. printVehicleName() 将始终引用全局变量(即使它被分配给对象中的方法)
  2. Vehicle.getVehicleName() 等同于printVehicleName()

    //declaring a global variable
    let vehicleName = "Dodge";

    //declaring a method to print vehicleName
    function printVehicleName(){
    console.log(vehicleName); // vehicleName is global variable
    }

    //declaring a object using object literal notation
    let Vehicle = {
    vehicleName : "Ferrari",
    getVehicleName : printVehicleName // Referring to the global function
    };

    //executing printVehicleName function
    printVehicleName();

    //executing getVehicleName function
    Vehicle.getVehicleName(); // This is == to printVehicleName()

要让 Vehicle 对象打印自己的变量,您需要使用 this 变量。

简而言之,您不能将 printVehicleName 重用于对象中的方法,因为如果您打印 this.vehicleName,它将不再正常工作。

像这样,您需要在对象中使用不同的方法。

    let Vehicle = {
vehicleName: "Ferrari",
getVehicleName: function() { console.log(this.vehicleName); }
};

关于javascript - 为什么函数 getVehicleName 打印全局变量 vehicleName 而不是 Vehicle 对象内的变量 vehicleName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55568257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com