为什么函数 getVehicleName 在车辆对象中打印全局变量车辆名称而不是变量车辆名称



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

//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 函数打印"法拉利",但是当我调用这两个函数时,两者都会打印在全局范围"闪避"上声明的车辆名称。谁能解释一下这样做的原因以及打印"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); }
    };

在你的函数中使用关键字this。

this.vehicleName

使用此选项可访问对象属性。

您需要

实际创建一个method并使用this将上下文设置为Vehicle对象内的vehicleName

对象可以在创建之前引用其 self 属性

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: function() {
    return this.vehicleName
  }
};
//executing printVehicleName function
printVehicleName();
//executing getVehicleName function
console.log(Vehicle.getVehicleName());

您可以重复使用printVehicleName .此行printVehicleName(vcName = vehicleName)将采用默认vehicleName但是从getVehicleName调用时,您可以传递上下文

//declaring a global variable
let vehicleName = "Dodge";
//declaring  a method to print vehicleName
function printVehicleName(vcName = vehicleName) {
  return vcName;
}
//declaring a object using object literal notation
let Vehicle = {
  vehicleName: "Ferrari",
  getVehicleName: function() {
    return printVehicleName(this.vehicleName)
  }
};
//executing printVehicleName function
printVehicleName();
//executing getVehicleName function
console.log(Vehicle.getVehicleName());

我更改了车辆声明部分首先更改车辆名称的值,然后调用 printVehicleName 函数

 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: function () { vehicleName = this.vehicleName; printVehicleName() }
        };
 
  
        //executing printVehicleName function
       
        printVehicleName(vehicleName);
        //executing getVehicleName function
        Vehicle.getVehicleName();

最新更新